web-dev-qa-db-fra.com

Sélection de nœud XML individuel à l'aide de SQL

J'ai une grosse note XML avec de nombreux nœuds.

y a-t-il une façon de ne pouvoir sélectionner qu'un seul nœud et tout son contenu du plus grand XML?

j'utilise SQL 2005

14
kacalapy

Vous devez utiliser la méthode Query () Si vous souhaitez faire participer votre XML.

declare @XML xml

set @XML = 
'
<root>
  <row1>
    <value>1</value>
  </row1>
  <row2>
    <value>2</value>
  </row2>
</root>
'

select @XML.query('/root/row2')

Résultat:

<row2>
  <value>2</value>
</row2>

Si vous souhaitez la valeur d'un nœud spécifique, vous devez utiliser Méthode Value () .

select @XML.value('(/root/row2/value)[1]', 'int')

Résultat:

2

Mise à jour:

Si vous souhaitez déchiqueter votre XML sur plusieurs lignes, vous utilisez Méthode Nœuds () .

Pour obtenir des valeurs:

declare @XML xml

set @XML = 
'
<root>
  <row>
    <value>1</value>
  </row>
  <row>
    <value>2</value>
  </row>
</root>
'

select T.N.value('value[1]', 'int')
from @XML.nodes('/root/row') as T(N)

Résultat:

(No column name)
1
2

Pour obtenir le XML entier:

select T.N.query('.')
from @XML.nodes('/root/row') as T(N)

Résultat:

(No column name)
<row><value>1</value></row>
<row><value>2</value></row>
30
Mikael Eriksson