Maison >base de données >tutoriel mysql >Comment éliminer les espaces de noms redondants dans les requêtes Nested FOR XML PATH ?
Gestion des espaces de noms redondants dans FOR XML PATH avec des requêtes imbriquées
Dans les requêtes FOR XML PATH où un espace de noms par défaut est déclaré à l'aide de WITH XMLNAMESPACES, redondant Les déclarations d'espace de noms peuvent apparaître dans les nœuds de niveau supérieur des requêtes imbriquées. Pour résoudre ce problème, une solution efficace consiste à exploiter FOR XML EXPLICIT, comme illustré ci-dessous :
DECLARE @Order TABLE (OrderID INT, OrderDate DATETIME)
DECLARE @OrderDetail TABLE (OrderID INT, ItemID VARCHAR( 1), Nom VARCHAR(50), Qté INT)
-- Initialiser le tables
INSERT @Order VALUES (1, '2010-01-01'), (2, '2010-01-02')
INSERT @OrderDetail VALUES
(1, 'A', 'Drink ', 5),
(1, 'B', 'Tasse', 2),
(2, 'A', 'Boire', 2),
(2, 'C', 'Paille', 1),
(2, 'D', 'Serviette' , 1)
-- Effectuer une requête FOR XML PATH imbriquée
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
)
-- Supprimer l'espace de noms redondant et nœud racine utilisant FOR XML EXPLICIT
SELECT
1 AS Tag,
NULL AS Parent,
@xml AS [xml!1!!xmltext],
'http://test.com/order' AS [xml!1!xmlns]
POUR XML EXPLICIT
Cette combinaison de requêtes supprime efficacement l'espace de noms redondant de la requête imbriquée tout en préservant les déclarations nécessaires au niveau supérieur. Le résultat est un document XML bien formé avec un seul élément racine correctement espace de noms.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!