Saya memiliki nilai XML seperti ini:
<R>
<I>A</I>
<I>B</I>
<I>C</I>
...
</R>
Saya ingin menyatukan semua I
nilai dan mengembalikan mereka sebagai string tunggal: ABC...
.
Sekarang saya tahu bahwa saya bisa merobek XML, mengumpulkan hasilnya kembali sebagai XML tanpa tanda, dan berlaku .values('text()[1]', ...)
untuk hasilnya:
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)')
;
Namun, saya ingin melakukan semua itu menggunakan metode XPath / XQuery saja, seperti ini:
SELECT @MyXml. ? ( ? );
Apakah ada cara seperti itu?
Alasan saya mencari solusi ke arah ini adalah karena XML saya yang sebenarnya mengandung elemen lain juga, misalnya:
<R>
<I>A</I>
<I>B</I>
<I>C</I>
...
<J>X</J>
<J>Y</J>
<J>Z</J>
...
</R>
Dan saya ingin dapat mengekstraksi I
nilai - nilai sebagai string tunggal dan J
nilai - nilai sebagai string tunggal tanpa harus menggunakan skrip yang berat untuk masing-masing.
sumber
Bergantung pada struktur XML Anda yang sebenarnya, Anda dapat mempertimbangkan untuk menggunakan loop seperti ini:
yang menghasilkan ini:
Lihat biola ini
sumber
Jika elemen dan nilai Anda benar-benar singkat dan berbeda, ini berfungsi:
Untuk XML non-sepele itu mungkin berjuang.
sumber