Ich habe einen XML-Wert wie diesen:
<R>
<I>A</I>
<I>B</I>
<I>C</I>
...
</R>
Ich möchte alle verketten I
Werte und bringt sie als einzelne Zeichenfolge: ABC...
.
Jetzt weiß ich, dass ich das XML zerkleinern, die Ergebnisse als knotenloses XML zusammenfassen und .values('text()[1]', ...)
auf das Ergebnis anwenden kann :
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)')
;
All dies möchte ich jedoch nur mit XPath / XQuery-Methoden tun, etwa so:
SELECT @MyXml. ? ( ? );
Gibt es so etwas?
Der Grund, warum ich nach einer Lösung in diese Richtung suche, ist, dass mein tatsächliches XML auch andere Elemente enthält, zum Beispiel:
<R>
<I>A</I>
<I>B</I>
<I>C</I>
...
<J>X</J>
<J>Y</J>
<J>Z</J>
...
</R>
Und ich möchte in der Lage sein, sowohl die I
Werte als einzelne Zeichenfolge als auch die J
Werte als einzelne Zeichenfolge zu extrahieren, ohne für jedes ein unhandliches Skript verwenden zu müssen.
quelle
Abhängig von Ihrer tatsächlichen XML-Struktur können Sie eine Schleife wie die folgende verwenden:
was gibt dies aus:
Sehen Sie diese Geige
quelle
Wenn Ihre Elemente und Werte wirklich kurz und eindeutig sind, funktioniert Folgendes:
Für nicht-triviales XML kann es jedoch schwierig sein.
quelle