こんにちは皆さん、タイトルが示すように、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"?>
','');
しかし、私はまだ疑問に思っています。より良いアプローチはありますか?