我将 xml 存储在一个表和表中,其中包含我感兴趣的元素的名称/路径。
我想在没有硬编码路径和/或元素名称的情况下提取这些元素的值。我的 xml 的结构不会改变,它总是有父/子/元素。
是否可以加入 xml 和 table 以获取元素的值?
以下是我能够得到的示例。我认为可以将此解决方案扩展到 JOIN on ChildNode 和 Element,但不确定如何使用.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)')