Umgang mit redundanten Namespaces in FOR XML PATH mit verschachtelten Abfragen
In FOR XML PATH-Abfragen, bei denen ein Standard-Namespace mit WITH XMLNAMESPACES deklariert wird, redundant Namespace-Deklarationen können in Knoten der obersten Ebene verschachtelter Abfragen erscheinen. Um dieses Problem anzugehen, besteht eine wirksame Lösung darin, FOR XML EXPLICIT zu nutzen, wie unten gezeigt:
DECLARE @Order TABLE (OrderID INT, OrderDate DATETIME)
DECLARE @OrderDetail TABLE (OrderID INT, ItemID VARCHAR( 1), Name VARCHAR(50), Qty INT)
-- Initialisieren Sie die Tabellen
INSERT @Order VALUES (1, '2010-01-01'), (2, '2010-01-02')
INSERT @OrderDetail VALUES
(1, 'A', 'Drink ', 5),
(1, 'B', 'Cup', 2),
(2, 'A', 'Getränk', 2),
(2, 'C', 'Stroh', 1),
(2, 'D', 'Serviette', 1)
-- Führen Sie eine verschachtelte FOR XML PATH-Abfrage durch
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
)
-- Redundanten Namespace entfernen und Wurzelknoten mit FOR XML EXPLICIT
SELECT
1 AS Tag,
NULL AS Übergeordnet,
@xml AS [xml!1!!xmltext],
'http://test.com/order' AS [xml!1!xmlns]
FÜR XML EXPLICIT
Diese Kombination von Abfragen entfernt effektiv den redundanten Namespace aus der verschachtelten Abfrage und behält gleichzeitig die erforderlichen Deklarationen auf der obersten Ebene bei. Das Ergebnis ist ein wohlgeformtes XML-Dokument mit einem einzigen, ordnungsgemäß benannten Stammelement.
Das obige ist der detaillierte Inhalt vonWie eliminiere ich redundante Namespaces in verschachtelten FOR XML PATH-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!