興味のある要素の名前/パスを含むxmlをテーブルとテーブルに保存しています。
パスや要素の名前をハードコーディングせずに、これらの要素の値を抽出したいと思います。私のxmlの構造は変更されず、常に親/子/要素があります。
xmlとtableを結合して要素の値を取得することは可能ですか?
以下は私が得たものの例です。このソリューションをChildNodeとElementのJOINに拡張することは可能だと思いますが、ChildNodeとElementの使用方法とアクセス方法がわかりませ.query()
ん.value()
。
ご協力ありがとうございました。
DECLARE @xml xml
SET @xml =
'<Products>
<RedProduct>
<Details_RedProduct>
<Width>1</Width>
<Depth>2</Depth>
<Weight>3</Weight>
</Details_RedProduct>
</RedProduct>
<GreenProduct>
<Details_GreenProduct>
<Width>4</Width>
<Depth>5</Depth>
<Height>6</Height>
</Details_GreenProduct>
</GreenProduct>
<BlueProduct>
<Details_BlueProduct>
<Width>7</Width>
<Depth>8</Depth>
<Lenght>9</Lenght>
</Details_BlueProduct>
</BlueProduct>
</Products>'
DECLARE @ProductElement table (ProductNode nvarchar(100), ChildNode nvarchar(100), Element nvarchar(20))
INSERT INTO @ProductElement SELECT 'RedProduct','','Width'
INSERT INTO @ProductElement SELECT 'GreenProduct','','Width'
INSERT INTO @ProductElement SELECT 'GreenProduct','','Height'
UPDATE @ProductElement SET ChildNode = 'Details_' + ProductNode
SELECT ProductsCollection.query('local-name(.)').value('.','nvarchar(100)') as TestOutput
FROM @xml.nodes('//Products/*') productsXml (ProductsCollection)
INNER JOIN @ProductElement el ON el.ProductNode = ProductsCollection.query('local-name(.)').value('.','nvarchar(100)')