大家好,正如标题所说,我正在使用 API 按国家和城市获取天气信息。一切正常,正在返回输出。但是当我尝试将 varchar 转换为 xml 时,我遇到了问题。
看看我的代码和输出:
Declare @Object as Int;
Declare @ResponseText as Varchar(8000) ;
DECLARE @XML XML;
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'get', 'http://www.webservicex.net/globalweather.asmx/GetWeather?CityName=Stockholm&CountryName=Sweden', 'false'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
select @ResponseText
set @xml = cast(@ResponseText as xml);
select @XML
输出:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.webserviceX.NET"><?xml version="1.0" encoding="utf-16"?>
<CurrentWeather>
<Location>Stockholm / Bromma, Sweden (ESSB) 59-21N 017-57E 14M</Location>
<Time>Nov 12, 2013 - 04:20 PM EST / 2013.11.12 2120 UTC</Time>
<Wind> from the SW (220 degrees) at 10 MPH (9 KT):0</Wind>
<SkyConditions> partly cloudy</SkyConditions>
<Temperature> 44 F (7 C)</Temperature>
<DewPoint> 41 F (5 C)</DewPoint>
<RelativeHumidity> 87%</RelativeHumidity>
<Pressure> 29.83 in. Hg (1010 hPa)</Pressure>
<Status>Success</Status>
</CurrentWeather></string>
被铸造的:
<string xmlns="http://www.webserviceX.NET"><?xml version="1.0" encoding="utf-16"?>
<CurrentWeather>
<Location>Stockholm / Bromma, Sweden (ESSB) 59-21N 017-57E 14M</Location>
<Time>Nov 12, 2013 - 04:20 PM EST / 2013.11.12 2120 UTC</Time>
<Wind> from the SW (220 degrees) at 10 MPH (9 KT):0</Wind>
<SkyConditions> partly cloudy</SkyConditions>
<Temperature> 44 F (7 C)</Temperature>
<DewPoint> 41 F (5 C)</DewPoint>
<RelativeHumidity> 87%</RelativeHumidity>
<Pressure> 29.83 in. Hg (1010 hPa)</Pressure>
<Status>Success</Status>
</CurrentWeather></string>
首先,我不能返回:>s and <s as < >
?其次,我认为这里发生的事情是<?xml ..... ?>
正在改变地方并且破坏了xml。
以及如何将第一个输出转换为有效的 XML?
编辑:我通过添加解决了这个问题:
set @ResponseText = replace(replace(replace(@ResponseText,'>','>'),'<','<'),'<?xml version="1.0" encoding="utf-16"?>
','');
但我仍然想知道,有没有更好的方法?