Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menghapuskan Ruang Nama Berlebihan dalam Nested FOR XML PATH Queries?

Bagaimana untuk Menghapuskan Ruang Nama Berlebihan dalam Nested FOR XML PATH Queries?

Susan Sarandon
Susan Sarandonasal
2025-01-05 17:57:40306semak imbas

How to Eliminate Redundant Namespaces in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn