首頁 >資料庫 >mysql教程 >如何消除嵌套 FOR XML PATH 查詢中的冗餘命名空間?

如何消除嵌套 FOR XML PATH 查詢中的冗餘命名空間?

Susan Sarandon
Susan Sarandon原創
2025-01-05 17:57:40268瀏覽

How to Eliminate Redundant Namespaces in Nested FOR XML PATH Queries?

使用巢狀查詢處理FOR XML PATH 中的冗餘命名空間

在使用WITH XMLNAMESPACES 宣告預設命名空間的FOR XML PATH查詢中,冗餘命名空間聲明可能會出現在巢狀查詢的頂層節點中。為了解決這個問題,一個有效的解決方案是利用FOR XML EXPLICIT,如下所示:

DECLARE @Order TABLE (OrderID INT, OrderDate DATETIME)
DECLARE @OrderDetail TABLE (OrderDate DATETIME)

DECLARE @OrderDetail TABLE (OrderID INTINT, ItemID VARCHAR( 1), 名稱VARCHAR(50), 數量INT)


--初始化表
INSERT @Order VALUES (1, '2010-01-01'), (2, '2010-01-02')
INSERT @OrderDetail VALUES
(1, 'A', '喝', 5),
(1, 'B', '杯', 2),
(2, 'A', '飲料', 2),
(2, 'C', '吸管', 1),

(2, 'D' , '餐巾' , 1)


-- 執行嵌套的FOR XML PATH 查詢
DECLARE @xml XML = (

SELECT
OrderID AS "@OrderID",
(
  SELECT
    ItemID AS "@ItemID",
    Name AS "data()"
  FROM @OrderDetail
  WHERE OrderID = o.OrderID
  FOR XML PATH('Item'), TYPE
)


FROM @Order o
FOR XML PATH('Order'), ROOT('dummyTag'), TYPE

)


-- 刪除多餘的命名空間並根節點使用FOR XML EXPLICIT
SELECT
1 AS標籤,
NULL AS父級,
@xml AS [xml!1!!xmltext],
'http://test.com/order' AS [xml!1!xmlns]

FOR XML EXPLICIT

這種查詢組合有效地從嵌套查詢中刪除了冗餘的命名空間,同時在頂層保留了必要的聲明。結果是一個格式良好的 XML 文檔,具有單一、正確命名的根元素。

以上是如何消除嵌套 FOR XML PATH 查詢中的冗餘命名空間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn