SQL 服务器 Xml 带有未声明前缀的查询
SQL Server Xml query with undeclared prefix
我在 SQL Server 2008 中有一个变量,它包含 XML 列的一部分,但我无法查询它。 XML 可以 是否包含前缀 "ns0"。我想从 xml 中检索 [from]。我试过的查询是这样的:
DECLARE @Params XML
SET @Params = '<filter>
<ns0:from>2016-09-19</ns0:from>
<ns0:to>2017-01-01<ns0:to>
</filter>';
SELECT @Params.value('(/*:filter/*:from)[1]', 'Varchar(max)') AS [from]
我没有 XML header 来声明任何命名空间。当我尝试执行此操作时,出现此错误:
XML parsing: line 1, character 10, undeclared prefix
但是当我尝试这个时,一切正常:
SET @Params = '<filter>
<from>2016-09-19<from>
<to>2017-01-01<to>
</filter>
SELECT @Params.value('(/*:filter/*:from)[1]', 'Varchar(max)') AS [from]
如何使用 XPath 查询 xml 给出带前缀或不带前缀的示例来检索 [from]?
您的示例在两个方面无效:
- 不允许在没有相应的命名空间声明的情况下使用命名空间前缀。
- 您的关闭 标签不包含
/
无处不在...
这是一个丑陋的 hack,但你可以试试这个:
DECLARE @Params XML
SET @Params = REPLACE('<filter>
<ns0:from>2016-09-19</ns0:from>
<ns0:to>2017-01-01</ns0:to>
</filter>','ns0:','');
SELECT @Params.value('(/*:filter/*:from)[1]', 'date') AS [from];
如果您事先不知道所有名称空间前缀,这将变得非常棘手...
我在 SQL Server 2008 中有一个变量,它包含 XML 列的一部分,但我无法查询它。 XML 可以 是否包含前缀 "ns0"。我想从 xml 中检索 [from]。我试过的查询是这样的:
DECLARE @Params XML
SET @Params = '<filter>
<ns0:from>2016-09-19</ns0:from>
<ns0:to>2017-01-01<ns0:to>
</filter>';
SELECT @Params.value('(/*:filter/*:from)[1]', 'Varchar(max)') AS [from]
我没有 XML header 来声明任何命名空间。当我尝试执行此操作时,出现此错误:
XML parsing: line 1, character 10, undeclared prefix
但是当我尝试这个时,一切正常:
SET @Params = '<filter>
<from>2016-09-19<from>
<to>2017-01-01<to>
</filter>
SELECT @Params.value('(/*:filter/*:from)[1]', 'Varchar(max)') AS [from]
如何使用 XPath 查询 xml 给出带前缀或不带前缀的示例来检索 [from]?
您的示例在两个方面无效:
- 不允许在没有相应的命名空间声明的情况下使用命名空间前缀。
- 您的关闭 标签不包含
/
无处不在...
这是一个丑陋的 hack,但你可以试试这个:
DECLARE @Params XML
SET @Params = REPLACE('<filter>
<ns0:from>2016-09-19</ns0:from>
<ns0:to>2017-01-01</ns0:to>
</filter>','ns0:','');
SELECT @Params.value('(/*:filter/*:from)[1]', 'date') AS [from];
如果您事先不知道所有名称空间前缀,这将变得非常棘手...