Tengo un valor XML como este:
<R>
<I>A</I>
<I>B</I>
<I>C</I>
...
</R>
Quiero concatenar todos los I
valores y devolverlos como una sola cadena: ABC...
.
Ahora sé que puedo destruir el XML, agregar los resultados como un XML sin nodo y aplicarlo .values('text()[1]', ...)
al 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)')
;
Sin embargo, me gustaría hacer todo eso usando solo métodos XPath / XQuery, algo como esto:
SELECT @MyXml. ? ( ? );
¿Hay tal manera?
La razón por la que estoy buscando una solución en esta dirección es porque mi XML real también contiene otros elementos, por ejemplo:
<R>
<I>A</I>
<I>B</I>
<I>C</I>
...
<J>X</J>
<J>Y</J>
<J>Z</J>
...
</R>
Y me gustaría poder extraer los I
valores como una sola cadena y los J
valores como una sola cadena sin tener que usar un script difícil de manejar para cada uno.