Maison >base de données >tutoriel mysql >Comment puis-je éliminer les déclarations d'espace de noms redondantes dans les requêtes imbriquées « FOR XML PATH » ?
Dans le contexte des requêtes "FOR XML PATH" utilisant "WITH XMLNAMESPACES" pour définir les espaces de noms par défaut, les requêtes imbriquées peut introduire des déclarations d'espace de noms redondantes au niveau supérieur. Ce problème survient lorsque les sous-requêtes utilisent « FOR XML PATH » dans la requête imbriquée.
Considérez la requête suivante :
... select a.c2 as "@species" , (select l.c3 as "text()" from t2 l where l.c2 = a.c1 for xml path('leg'), type) as "legs" from t1 a for xml path('animal'), root('zoo') ...
Ici, la requête imbriquée pour "legs" entraînera une déclaration d'espace de noms supplémentaire pour "uri:animal" sur les "legs" élément.
Pour éliminer cette redondance, une combinaison de "FOR XML PATH" dans les sous-requêtes et "FOR XML EXPLICIT" dans la requête principale peut être utilisée. Cette approche implique d'utiliser la directive "xmltext" dans la requête "FOR XML EXPLICIT" pour supprimer la déclaration d'espace de noms la plus externe.
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) SELECT 1 AS Tag ,NULL AS Parent ,@xml AS [xml!1!!xmltext] ,'http://test.com/order' AS [xml!1!xmlns] FOR XML EXPLICIT
Le résultat sera :
<xml xmlns="http://test.com/order"> <Order OrderID="1"> <Item ItemID="A">Drink</Item> <Item ItemID="B">Cup</Item> </Order> <Order OrderID="2"> <Item ItemID="A">Drink</Item> <Item ItemID="C">Straw</Item> <Item ItemID="D">Napkin</Item> </Order> </xml>
Cette technique fournit la flexibilité de "FOR XML PATH" pour les requêtes imbriquées tout en conservant une seule déclaration d'espace de noms sur le nœud racine.
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!