2014-04-16 55 views
2

我试图将XML文件分解为mssql数据库(SQL Server 2008 R2)。我正在寻找一个特定元素值的属性值。使用TSQL和XQuery解析XML - 获取给定元素值的属性值

文件的摘录:

<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> 

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

到目前为止我已经想出了下面的代码:

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。我尝试了几条路径,但没有一条返回正在查找的内容。有人能指出我做错了什么吗?

任何帮助非常感谢!

回答

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 
0

尝试

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

为您的XPath