我正在使用相当简单的Xpath查询(下面)来查询SQL Server 2008数据库列,其值都遵循示例的形式(在下面)。我的查询返回所有行的NULL
,而不是example
属性的值(例如“VALUE”),即使为我查询的每一行定义了example
属性。
我尝试在我的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
答案 0 :(得分:4)
您需要为xml数据添加默认命名空间,并且很可能修改xpath查询。
我没有运行此测试,但这是我最好的猜测,应该让你去:
WITH XMLNAMESPACES (N'http://intranet' as intra)
SELECT ColumnName.value('/intra:RootNode[@example]/intra:IsValid[1]', 'nvarchar(15)') [Result]
FROM TableName
答案 1 :(得分:4)
此查询有效。问题是数据节点声明了一个自定义的默认命名空间。
select ColumnName.value('
declare default element namespace "http://intranet";
(/RootNode/@example)[1]', 'nvarchar(15)') [Result]
from TableName