SoapClient返回一个长字符串

时间:2014-12-21 08:54:58

标签: php web-services soap wsdl soap-client

这是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节点的结果?

1 个答案:

答案 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]