我通过 php 使用此网络服务
$wsdl = 'http://www.ezzylearning.com/services/CountryInformationService.asmx?wsdl';
$soap = new soapClient($wsdl);
try{
$return = $soap->GetCountriesByContinent(array('continentCode'=>'AS'));
} catch (Exception $e) {
die ('Error: ' . $e->getMessage());
}
var_dump($return->GetCountriesByContinentResult);
我得到这个结果:
object(stdClass)#3 (2) { ["schema"]=> string(607) "" ["any"]=> string(6747) "AFAFGAfghanistanAMARMArmeniaAZAZEAzerbaijanBHBHRBahrainBDBGDBangladeshBTBTNBhutanIOIOTBritish Indian Ocean TerritoryBNBRNBruneiKHKHMCambodiaCNCHNChinaCXCXRChristmas IslandCCCCKCocos IslandsGEGEOGeorgiaHKHKGHong KongININDIndiaIDIDNIndonesiaIRIRNIranIQIRQIraqILISRIsraelJPJPNJapanJOJORJordanKZKAZKazakhstanKWKWTKuwaitKGKGZKyrgyzstanLALAOLaosLBLBNLebanonMOMACMacaoMYMYSMalaysiaMVMDVMaldivesMNMNGMongoliaMMMMRMyanmarNPNPLNepalKPPRKNorth KoreaOMOMNOmanPKPAKPakistanPSPSEPalestinian TerritoryPHPHLPhilippinesQAQATQatarSASAUSaudi ArabiaSGSGPSingaporeKRKORSouth KoreaLKLKASri LankaSYSYRSyriaTWTWNTaiwanTJTJKTajikistanTHTHAThailandTRTURTurkeyTMTKMTurkmenistanAEAREUnited Arab EmiratesUZUZBUzbekistanVNVNMVietnamYEYEMYemen" }
如您所见,以这种方式获取数组是没有用的,因为所有内容都是附加的。 那么,哪种方式才是使用这项服务的正确方式呢?
提前致谢。
最佳答案
WSDL 定义确定 SoapClient 如何形成请求和解释响应。
您尝试访问的方法的响应定义如下:
<s:element name="GetCountriesByContinentResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetCountriesByContinentResult">
<s:complexType>
<s:sequence>
<s:element ref="s:schema" />
<s:any />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
因此 PHP 正在将 XML 响应转换为 schema
和 any
。 any
只是 XML 内容的字符串版本。
any
的内容应该是有效的 XML,因此,如果您无法修改 WDSL,您始终可以使用 XML 解析器读取该字符串。
关于php - 使用 PHP 在 WSDL 中使用奇怪的附加响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12965722/