2013-09-30 136 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