Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menghapuskan Ruang Nama Berlebihan dalam Nested FOR XML PATH Queries?
Mengendalikan Ruang Nama Berlebihan dalam FOR XML PATH dengan Pertanyaan Bersarang
Dalam pertanyaan FOR XML PATH di mana ruang nama lalai diisytiharkan menggunakan WITH XMLNAMESPACES, berlebihan pengisytiharan ruang nama mungkin muncul dalam nod peringkat atas pertanyaan bersarang. Untuk menangani isu ini, satu penyelesaian yang berkesan ialah memanfaatkan FOR XML EXPLICIT, seperti yang ditunjukkan di bawah:
DECLARE @Order TABLE (OrderID INT, OrderDate DATETIME)
DECLARE @OrderDetail TABLE (OrderID INT, ItemID VARCHAR( 1), Nama VARCHAR(50), Kuantiti INT)
-- Mulakan jadual
INSERT @Order NILAI (1, '2010-01-01'), (2, '2010-01-02')
INSERT @OrderDetail NILAI
(1, 'A', 'Minum', 5),
(1, 'B', 'Cup', 2),
(2, 'A', 'Minum', 2),
(2, 'C', 'Straw', 1),
(2 , 'D', 'Napkin', 1)
-- Lakukan nested FOR XML PATH query
DECLARE @xml XML = (
PILIH
OrderID AS "@OrderID", ( SELECT ItemID AS "@ItemID", Name AS "data()" FROM @OrderDetail WHERE OrderID = o.OrderID FOR XML PATH('Item'), TYPE )
DARI @Order o
UNTUK LALUAN XML('Order'), ROOT('dummyTag'), TYPE
)
-- Alih keluar ruang nama yang berlebihan dan nod akar menggunakan FOR XML EXPLICIT
SELECT
1 AS Teg,
NULL SEBAGAI Induk,
@xml AS [xml!1!!xmltext],
'http://test.com/order' AS [xml!1!xmlns]
UNTUK XML EXPLICIT
Gabungan pertanyaan ini secara berkesan mengalih keluar ruang nama berlebihan daripada pertanyaan bersarang sambil mengekalkan pengisytiharan yang diperlukan di tingkat atas. Hasilnya ialah dokumen XML yang dibentuk dengan baik dengan satu elemen akar ruang nama yang betul.
Atas ialah kandungan terperinci Bagaimana untuk Menghapuskan Ruang Nama Berlebihan dalam Nested FOR XML PATH Queries?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!