的XPath有效的XPath表达式
问题描述:
我使用了一个相当简单的Xpath查询(见下文)查询其值都遵循例子(低于)的形式的SQL Server 2008数据库列返回NULL。对于所有行,我的查询返回NULL
,而不是example
属性(例如“VALUE”)的值,即使我为查询的每一行都定义了example
属性。的XPath有效的XPath表达式
我试过在我的Xquery表达式中声明xsd
和xsi
命名空间,并从多个不同的属性名称中进行选择,但都没有任何效果。我错过了什么?
查询:
select ColumnName.value('(/RootNode/@example)[1]', 'nvarchar(15)') [Result]
from TableName
XML样本节点(实际XML包含有更多的属性,这些属性我省略):
<RootNode xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://intranet"
example="VALUE">
<IsValid>true</IsValid>
</RootNode>
使用名称空间,具有相同尝试查询结果:
select ColumnName.value('
declare namespace xsd="http://www.w3.org/2001/XMLSchema";
declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance";
(/RootNode/@example)[1]', 'nvarchar(15)') [Result]
from TableName
答
您需要为您的xml数据添加默认命名空间,并且最有可能修改xpath查询。
我还没有运行这个测试,但它是我最好的猜测,应该让你去:
WITH XMLNAMESPACES (N'http://intranet' as intra)
SELECT ColumnName.value('/intra:RootNode[@example]/intra:IsValid[1]', 'nvarchar(15)') [Result]
FROM TableName
+0
谢谢,这是我刚刚到达的另一种语法。 – Dov 2013-04-22 19:08:59
答
此查询工作。问题是数据节点声明了一个自定义的默认名称空间。
select ColumnName.value('
declare default element namespace "http://intranet";
(/RootNode/@example)[1]', 'nvarchar(15)') [Result]
from TableName
我没有看到你提到的查询的命名空间。不'xsi'或'xsd',但默认设置一个,通过'http:// intranet' – 2013-04-22 18:55:08
@StenPetrov我尝试添加的,但它并没有区别,所以我删除他们 – Dov 2013-04-22 18:57:55
'xsd'和'xsi'赢得”不同,默认的命名空间会。我也有麻烦也破坏你的xpath。看起来你正在寻找'IsValid'作为具有'@ example'的'RootNode',这将是'// RootNode [@example]/IsValid' – 2013-04-22 19:02:15