Sql server Xpath为有效的Xpath表达式返回NULL
我使用一个相当简单的Xpath查询(如下)来查询SQLServer2008数据库列,该列的值都遵循示例(如下)的形式。我的查询为所有行返回Sql server Xpath为有效的Xpath表达式返回NULL,sql-server,xml,xpath,xquery,xml-namespaces,Sql Server,Xml,Xpath,Xquery,Xml Namespaces,我使用一个相当简单的Xpath查询(如下)来查询SQLServer2008数据库列,该列的值都遵循示例(如下)的形式。我的查询为所有行返回NULL,而不是example属性(例如“VALUE”)的值,即使为我查询的每一行定义了example属性 我尝试在Xquery表达式中声明xsd和xsi名称空间,并从多个不同的属性名称中进行选择,但都没有任何效果。我错过了什么 查询: select ColumnName.value('(/RootNode/@example)[1]', 'nvarchar(1
NULL
,而不是example
属性(例如“VALUE”)的值,即使为我查询的每一行定义了example
属性
我尝试在Xquery表达式中声明
xsd
和xsi
名称空间,并从多个不同的属性名称中进行选择,但都没有任何效果。我错过了什么
查询:
select ColumnName.value('(/RootNode/@example)[1]', 'nvarchar(15)') [Result]
from TableName
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示例节点(实际的XML包含更多属性,我省略了这些属性):
您需要为xml数据添加默认名称空间,并很可能修改xpath查询 我没有运行此测试,但这是我最好的猜测,应该可以让您继续:
WITH XMLNAMESPACES (N'http://intranet' as intra)
SELECT ColumnName.value('/intra:RootNode[@example]/intra:IsValid[1]', 'nvarchar(15)') [Result]
FROM TableName
这个查询有效。问题在于数据节点声明了一个自定义的默认名称空间
select ColumnName.value('
declare default element namespace "http://intranet";
(/RootNode/@example)[1]', 'nvarchar(15)') [Result]
from TableName
我没有看到您的查询中提到的名称空间。不是
xsi
或xsd
,而是默认设置的http://intranet
@stenportov我尝试添加这些,但没有什么区别,所以我删除了它们xsd
,xsi
不会有区别,默认名称空间会有区别。我在解密xpath时也遇到了问题。看起来您正在为具有@example
的RootNode
检索IsValid
,这将是//RootNode[@example]/IsValid
@stenprov您是对的,它确实与默认名称空间有关。我很快会补充一个答案。谢谢,谢谢,这是我刚才讲的另一个语法。
select ColumnName.value('
declare default element namespace "http://intranet";
(/RootNode/@example)[1]', 'nvarchar(15)') [Result]
from TableName