【发布时间】:2013-04-22 18:47:29
【问题描述】:
我正在使用一个相当简单的 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
【问题讨论】:
-
我没有看到您的查询中提到的命名空间。不是
xsi或xsd,而是默认设置一个http://intranet -
@StenPetrov 我尝试添加这些,但没有任何区别,所以我删除了它们
-
xsd和xsi不会有区别,默认命名空间会。我在解密您的 xpath 时也遇到了麻烦。看起来您正在寻找具有@example的RootNode检索IsValid,这将是//RootNode[@example]/IsValid -
@StenPetrov 你是对的,它确实与默认命名空间有关。我将很快添加一个答案。谢谢。
标签: sql-server xml xpath xquery xml-namespaces