2013-09-30 172 views
-2

我想從下面的soap響應中獲取所有元素和值作爲數組。但我只是獲取元素而沒有價值。使用PHP解析soap響應

我已經使用這個解析器來獲取元素和值。提前致謝。

這裏是我使用的代碼,

$response = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <toy:SearchReq xmlns:toy="www.something.com/toy" xmlns:gen="www.something.com/gen"> 
     <gen: manufacturedIn="SomePlace"/> 
     <toy:SearchToy> 
      <toy:SearchType> 
       <gen:Shop Code="WALMART"/> 
      </toy:SearchType>  
     </toy:SearchToy> 
     <toy:SearchToy> 
      <toy:SearchType> 
       <gen:Shop Code="AMAZON"/> 
      </toy:SearchType>  
     </toy:SearchToy> 
     </toy:SearchReq> 
    </soapenv:Body> 
</soapenv:Envelope>'; 

$doc = simplexml_load_string($response); 

$path = array($doc 
    ->children('http://schemas.xmlsoap.org/soap/envelope/') 
    ->Body 
    ->children('www.something.com/toy')); 


foreach($path as $elem){ 
    print_r($elem); 
    $elemChild = $elem->children('www.something.com/gen'); 
    var_dump($elemChild); 
} 

回答

0

您可以通過註冊命名空間讀取SOAP消息 - 只有當您關心消息的SOAP部分需要命名空間位。

$xml = simplexml_load_string($xml); 
$xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/'); 
foreach ($xml->xpath('//toy') as $toy) 
{ 
    print_r($toy); 
} 
+0

分辨率不工作。我已經嘗試過了。此外,我需要在單個搜索中的所有子節點。可能會爲具有已知名稱空間的未知響應元素。提前感謝。 – user2824187