使用TSQL和XQuery解析XML - 获取给定元素值的属性值

时间:2014-04-16 10:46:41

标签: tsql xpath sql-server-2008-r2 xquery

我试图将XML文件粉碎成mssql数据库(SQL Server 2008 R2)。我正在寻找特定元素值的属性值。

文件的摘录:

<company>
    <names>
        <name percent="6.55">Company X</name>
        <name percent="4.99">Company Y</name>
        <name percent="4.92">Company Z</name>
    </names>
</company>

所以我正在寻找名称元素的百分比属性的值,其中name元素等于&#34;公司Z&#34;。在这种情况下,应该返回值&#34; 4.92&#34;。

到目前为止,我已经提出了以下代码:

declare @xml xml

set @xml = N'
<company>
    <names>
        <name percent="6.55">Company X</name>
        <name percent="4.99">Company Y</name>
        <name percent="4.92">Company Z</name>
    </names>
</company>'

select
    @xml.value('(/company/names[name = "Company Z"]/@percent)[1]', 'decimal(8,5)') as Percentage

返回NULL。我已经尝试了几条路径,但没有一条能够回归我正在寻找的路径。有人可以指出我做错了吗?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

data(/company/names/name[.='Company Z']/@percent)

作为你的xpath

答案 1 :(得分:0)

declare @xml xml

set @xml = N'
<company>
    <names>
        <name percent="6.55">Company X</name>
        <name percent="4.99">Company Y</name>
        <name percent="4.92">Company Z</name>
    </names>
</company>'

select
    @xml.value('(/company/names/name[. = "Company Z"]/@percent)[1]', 'decimal(8,5)') as Percentage