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