在Microsoft SQL Server 2008中,在XML流列值上执行.query('{xpath}/text()')
时,如果选定的XPath节点的值包含“&
”,则返回值为“&
” “而不是”&
“。
这是一个错误,还是我做错了什么?或者更确切地说,如果XPath查询中的text()不应该这样做,我如何使用SQLXML XPath获取未编码的文本,即等效于.innerText(根据W3C XML DOM)?
答案 0 :(得分:4)
没错,SQL XML正确解码XML转义序列:
declare @x xml;
set @x = '<node>&some</node>';
select @x.value(N'(node)[1]', N'varchar(max)');
最有可能的问题是您对XML query方法的误解:它返回 XML 片段,因此所有内容都将被转义,因为它是XML:
declare @x xml;
set @x = '<node>&some</node>';
select @x.query(N'/node/text()');