这是WSDL格式:
http://www.petango.com/webservices/wsadoption.asmx?WSDL
我正在使用开发人员提供的测试服务器,该服务器表示它将以下列XML格式返回SOAP响应:
<ArrayOfXmlNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.petango.com/">
<!-- Animal 1 // -->
<XmlNode>
<adoptableSearch xmlns="">
<ID>10270740</ID>
<Name>Peyton</Name>
<Species>Dog</Species>
<Sex>Male</Sex>
</adoptableSearch>
</XmlNode>
...
<!-- Animal n - 1 // -->
<XmlNode>
<adoptableSearch xmlns="">
<ID>4252534</ID>
<Name>Chilli</Name>
<Species>Dog</Species>
<Sex>Male</Sex>
</adoptableSearch>
</XmlNode>
</ArrayOfXmlNode>
我设置了SOAP调用:
$wsdl = 'http://www.petango.com/webservices/wsadoption.asmx?WSDL';
$client = new SoapClient($wsdl);
$params = array(
'authkey' => 'myauthkey',
'speciesID' => '',
'sex' => '',
'ageGroup' => '',
'location' => '',
'site' => '',
'onHold' => '',
'orderBy' => '',
'primaryBreed' => '',
'secondaryBreed' => '',
'specialNeeds' => '',
'noDogs' => '',
'noCats' => '',
'noKids' => '',
'stageID' => ''
);
$result = $client->AdoptableSearch($params);
然后我把它打印出来:
echo print_r($result, true);
当我查看来源时,我得到:
stdClass Object
(
[AdoptableSearchResult] => stdClass Object
(
[XmlNode] => Array
(
[0] => stdClass Object
(
[any] => <adoptableSearch xmlns=""><ID>10270740</ID><Name>Peyton</Name><Species>Dog</Species><Sex>Male</Sex></adoptableSearch>
)
[1] => stdClass Object
(
[any] => <adoptableSearch xmlns=""><ID>10270740</ID><Name>Peyton</Name><Species>Dog</Species><Sex>Male</Sex></adoptableSearch>
)
...
如您所见,一切都按预期返回,直到我们了解动物的实际细节。此时,结果是any
属性下的一个长XML字符串。 any
属性来自何处以及为什么动物细节不会分解为单独的属性或键,如xml节点的结果?
答案 0 :(得分:1)
它是任何因为在WSDL文件中,adoptableSearch的响应包含任何类型。
<s:element minOccurs="0" maxOccurs="unbounded" name="XmlNode" nillable="true">
<s:complexType mixed="true">
<s:sequence>
<s:any/>
</s:sequence>
</s:complexType>
您可以使用此php方法将字符串xml转换为数组对象。
simplexml_load_string [http://php.net/manual/en/function.simplexml-load-string.php]