xmlは、興味のある要素の名前/パスを持つテーブルとテーブルに格納されています。SQL ServerでXQueryを使用して要素の名前をハードコーディングせずにXMLから値を抽出する方法はありますか
ハードコーディングパスや要素の名前を使わずにこれらの要素の値を抽出したいと思います。私のXMLの構造は変更されません、それは常に親/子/要素があります。
xmlとtableを結合して要素の値を取得することはできますか?
以下は私が得ることのできる例です。 ChildNodeとElementのJOINにこのソリューションを拡張することは可能だと思いますが、.query()
と.value()
をChildNodeとElementにどのように使用するかはわかりません。
ありがとうございました。
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)')
私の場合は2番目のオプションが少し速いです。 あなたの答えと2つのオプションを提供していただきありがとうございます。 –