2014-12-21 86 views
1

這裏是WSDL格式:SoapClient的返回一個長字符串

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

它是任何因爲在adoptableSearch的WSDL文件響應包含任何類型。

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

+0

所以我必須手動做到這一點,並沒有因爲WSDL格式的沒有辦法自動獲取領域劃分,? –

+0

是的,我相信。有一些PHP Web服務的框架http://wso2.com/products/web-services-framework/php/他們可能會這樣做,但我沒有試過類型。 –