Maison >base de données >tutoriel mysql >Comment éliminer les espaces de noms redondants dans les requêtes Nested FOR XML PATH ?

Comment éliminer les espaces de noms redondants dans les requêtes Nested FOR XML PATH ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-05 17:57:40304parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn