Eu tenho um valor XML como este:
<R>
<I>A</I>
<I>B</I>
<I>C</I>
...
</R>
Quero concatenar todos os I
valores e retorná-los como uma única sequência:ABC...
.
Agora eu sei que posso fragmentar o XML, agregar os resultados novamente como um XML sem assentimento e aplicar .values('text()[1]', ...)
ao resultado:
SELECT
(
SELECT
n.n.value('text()[1]', 'varchar(50)') AS [text()]
FROM
@MyXml.nodes('/R/I') AS n (n)
FOR XML
PATH (''),
TYPE
).value('text()[1]', 'varchar(50)')
;
No entanto, eu gostaria de fazer tudo isso usando apenas métodos XPath / XQuery, algo como isto:
SELECT @MyXml. ? ( ? );
Existe tal maneira?
O motivo pelo qual estou procurando uma solução nessa direção é porque meu XML real também contém outros elementos, por exemplo:
<R>
<I>A</I>
<I>B</I>
<I>C</I>
...
<J>X</J>
<J>Y</J>
<J>Z</J>
...
</R>
E eu gostaria de poder extrair os I
valores como uma única sequência e os J
valores como uma única sequência sem precisar usar um script pesado para cada um.