我的xml是:
<foo>
<bar>
<button text="a"/>
<button text="b"/>
<button text="c"/>
</bar>
</foo>
使用以下命令,我可以获取这些文本值之一,但我尝试将所有三个值都取回来(每个都在自己的行上)。我意识到[1]
是为什么我要找回来的原因...但是我不确定如何将他们找回来?
select
cast(f.xml as xml).value('(/foo/bar/button/@text)[1]', 'varchar(max)') as foo
from
(select top 1 * from files) f
这将返回
Foo
---
a
我实际上想要去的地方
Foo
---
a
b
c
答案 0 :(得分:1)
您需要在nodes
中使用FROM
运算符,可以通过使用CROSS APPLY
来完成此操作:
DECLARE @XML xml = '
<foo>
<bar>
<button text="a"/>
<button text="b"/>
<button text="c"/>
</bar>
</foo>';
SELECT fb.button.value('@text','char(1)')
FROM (VALUES(@XML))X(XMLString)
CROSS APPLY X.XMLSTRING.nodes('foo/bar/button') fb(button);
答案 1 :(得分:1)