使用SQL选择单个XML节点

22

我有一个包含许多节点的大 XML 笔记。

是否有一种方法可以从较大的 XML 中仅选择单个节点及其所有内容?

我正在使用 SQL 2005。

1个回答

49
如果你想获取XML的一部分,应该使用query()方法
declare @XML xml

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

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

结果:

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

如果您想要从特定节点中获取值,请使用 value() 方法
select @XML.value('(/root/row2/value)[1]', 'int')

结果:

2

更新:

如果您想将XML分成多行,请使用nodes()方法

获取值的方法如下:

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)

结果:

(No column name)
1
2

获取完整的 XML:
select T.N.query('.')
from @XML.nodes('/root/row') as T(N)

结果:

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

不错,如果每个行节点只是<row>,我想按顺序获取每个行节点怎么办? - kacalapy
我想要的结果是 (<row2><value>2</value></row2>),不是一个整数,但我想获取 row1 的 XML 块,然后是 row2... 对于所有行。 - kacalapy
@kacalapy - 更新了答案,说明了如何将XML分解为多行。 - Mikael Eriksson
请注意,节点方法示例的XML与上面更高的第一个示例中的<row1>相比有所不同..即不是相同的XML.. - Allan F

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接