sql xml响应包含&lt ;:而不是<

时间:2014-03-25 08:58:17

标签: sql-server xml stored-procedures

我有一个存储过程,我正在调用一个返回XML的Web服务。为了能够阅读瑞典语字符,我这样做:

select @xml = CAST(REPLACE(CAST(@response as nvarchar(max)), 'utf-8', 'utf-16') as xml)

@response是我从网络服务获得的回复。这确实能够读取瑞典语字符,但它并没有改变XML仍然看起来像是&lt;&gt;而不是<和{{1} }。

我该如何更改?

编辑--- 这就是我对xml响应的处理方式:

>

编辑2 ---- 这是xml响应: enter image description here

1 个答案:

答案 0 :(得分:2)

您在另一个XML中有一个只有一个根节点string的XML。

@response直接分配给@xml并使用value()将嵌入式XML作为nvarchar(max),然后转换为XML。

我没有看到你在那里编码ÅÄÖ,所以你可能需要调整解决方案来处理这个问题。

declare @xml xml
declare @response varchar(max)

-- Sample response
set @response = '<string xmlns="http://tempuri.org">&lt;?xml version=''1.0'' encoding=''utf-16''?&gt;&lt;PMDataSet&gt;SomeValue&lt;/PMDataSet&gt;</string>'

set @xml = @response
select cast(@xml.value('(*:string/text())[1]', 'nvarchar(max)') as xml)

结果:

<PMDataSet>SomeValue</PMDataSet>