最简单的做法是:
$requestParams = array(
'CityName' => 'Berlin',
'CountryName' => 'Germany'
);
$client = new SoapClient('http://www.webservicex.net/globalweather.asmx?WSDL');
$response = $client->GetWeather($requestParams);
print_r($response);
将输出
stdClass Object
(
[GetWeatherResult] => <?xml version="1.0" encoding="utf-16"?>
Berlin-Tegel, Germany (EDDT) 52-34N 013-19E 37M
Jan 26, 2012 - 07:50 AM EST / 2012.01.26 1250 UTC
from the SE (130 degrees) at 14 MPH (12 KT):0
greater than 7 mile(s):0
mostly clear
33 F (1 C)
Windchill: 23 F (-5 C):1
21 F (-6 C)
59%
30.27 in. Hg (1025 hPa)
Success
)
其余的可以用SimpleXML或类似的东西进行解析。
请注意,该类型的响应特定于此Web服务。在那里有更好的Web服务,它不仅仅是返回一个xml字符串,而是在WSDL中提供响应结构。
编辑“更结构化”的Web服务的示例可以是同一站点上的GeoIP查找:
$client = new SoapClient('http://www.webservicex.net/geoipservice.asmx?WSDL');
$result = $client->GetGeoIP(array('IPAddress' => '8.8.8.8'));
print_r($result);
这给你:
stdClass Object
(
[GetGeoIPResult] => stdClass Object
(
[ReturnCode] => 1
[IP] => 8.8.8.8
[ReturnCodeDetails] => Success
[CountryName] => United States
[CountryCode] => USA
)
)
现在您可以通过调用简单地访问这些值
$country = $result->GetGeoIPResult->CountryName;