J'ai xml stocké dans une table et un tableau avec les noms/chemins des éléments qui m'intéressent.Comment extraire des valeurs de XML sans coder en dur les noms des éléments à l'aide de XQuery dans SQL Server?
Je voudrais extraire les valeurs de ces éléments sans chemins de codage durs et/ou noms des éléments. La structure de mon xml ne changera pas, elle aura toujours parent/enfant/élément.
Est-il possible de joindre xml et table pour obtenir les valeurs des éléments?
Voici un exemple de ce que j'ai pu obtenir. Je pense qu'il est possible d'étendre cette solution à JOIN sur ChildNode et Element, mais je ne sais pas comment utiliser .query()
et .value()
pour obtenir ChildNode et Element.
Nous vous remercions de votre aide.
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)')
La deuxième option est légèrement plus rapide dans mon cas. Merci beaucoup pour votre réponse et pour avoir fourni deux options. –