ホームページ >データベース >mysql チュートリアル >ネストされた FOR XML PATH クエリで冗長な名前空間を削除するにはどうすればよいですか?

ネストされた FOR XML PATH クエリで冗長な名前空間を削除するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-05 17:57:40277ブラウズ

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

ネストされたクエリを使用した FOR XML PATH での冗長な名前空間の処理

デフォルトの名前空間が WITH XMLNAMESPACES を使用して宣言されている FOR XML PATH クエリでは、冗長です名前空間宣言は、ネストされたクエリの最上位ノードに現れる場合があります。この問題に対処するための効果的な解決策の 1 つは、次に示すように、FOR XML EXPLICIT を活用することです。

DECLARE @Order TABLE (OrderID INT, OrderDate DATETIME)
DECLARE @OrderDetail TABLE (OrderID INT, itemID VARCHAR( 1)、名前 VARCHAR(50)、数量 INT)

-- を初期化しますテーブル
INSERT @Order VALUES (1, '2010-01-01'), (2, '2010-01-02')
INSERT @OrderDetail VALUES
(1, 'A', 'Drink ', 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。