SQL Server 2008:SQLXML查询函数.query('// mypath / text()')不进行XML解码

时间:2010-03-04 21:25:02

标签: sql-server sql-server-2008 xpath sqlxml

在Microsoft SQL Server 2008中,在XML流列值上执行.query('{xpath}/text()')时,如果选定的XPath节点的值包含“&”,则返回值为“&amp” “而不是”&“。

这是一个错误,还是我做错了什么?或者更确切地说,如果XPath查询中的text()不应该这样做,我如何使用SQLXML XPath获取未编码的文本,即等效于.innerText(根据W3C XML DOM)?

1 个答案:

答案 0 :(得分:4)

没错,SQL XML正确解码XML转义序列:

declare @x xml;
set @x = '<node>&amp;some</node>';
select @x.value(N'(node)[1]', N'varchar(max)');

最有可能的问题是您对XML query方法的误解:它返回 XML 片段,因此所有内容都将被转义,因为它是XML:

declare @x xml;
set @x = '<node>&amp;some</node>';
select @x.query(N'/node/text()');