【问题标题】:sql xml response contains &lt: instead of <sql xml 响应包含 &lt: 而不是 <
【发布时间】:2014-03-25 08:58:16
【问题描述】:

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

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

@response 是我从 Web 服务获得的响应。这确实使它能够读取瑞典语字符,但它并没有改变这样一个事实,即使用&amp;lt;&amp;gt; 而不是&lt;&gt;,XML 看起来仍然很糟糕。

我该如何更改?

编辑--- 这就是我对 xml 响应所做的:

DECLARE @obj int
DECLARE @Url nvarchar (200)
DECLARE @response varchar(8000)
DECLARE @xml XML

EXEC sp_OACREATE 'MSXML2.ServerXMLHTTP', @obj OUT
    EXEC sp_OAMethod @obj, 'open', NULL, 'GET', @Url, false
    EXEC sp_OAMethod @obj, 'send'
    EXEC sp_OAGetProperty @obj, 'responsetext', @response OUT
    select @xml = CAST(REPLACE(CAST(@response as nvarchar(max)), 'utf-8','utf-16') as xml)

编辑 2---- 这是 xml 响应:

【问题讨论】:

  • @response 是什么数据类型。可以在@response 中发布内容示例吗?
  • @MikaelEriksson 我做了一个编辑 :) 它是 varchar 类型
  • 好的,但是内容是什么。我看到有一些带有 utf-8 编码的 XML,但是看看 < 会发生什么。以及如何处理它,您必须显示内容。
  • @MikaelEriksson 我将响应的图片放入其中,因为堆栈会自动翻译 & lt;到

标签: sql-server xml stored-procedures


【解决方案1】:

您在另一个 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>

【讨论】:

  • 非常感谢!这正是我想要的!:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 2018-08-02
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多