Как разобрать ответ SOAP в PHP - PullRequest
1 голос
/ 04 мая 2011

Последние несколько дней я ломал голову, пытаясь разобрать ответ мыла (через командную строку curl), но не могу заставить его работать. Я просто хочу получить значение объекта ResourceIdentifier, которое равно rs-1304500829200-200 . Я использую PHP 5.3.x

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns2:deliverMDRecordsResponse xmlns:ns2="http://mdstore.data.dnetlib.eu/" xmlns:ns3="http://www.w3.org/2005/08/addressing">
      <return>
        <ns3:Address>http://129.70.12.20:8282/dnet-mdstore/services/MDStoreResultSet</ns3:Address>
        <ns3:ReferenceParameters>
           <ResourceIdentifier:ResourceIdentifier xmlns:ResourceIdentifier="http://www.driver.org" xmlns:wsa="http://www.w3.org/2005/08/addressing">rs-1304500829200-200</ResourceIdentifier:ResourceIdentifier>
       </ns3:ReferenceParameters>
        </return>
     </ns2:deliverMDRecordsResponse>
   </soap:Body>
 </soap:Envelope>

<?
 $response=<<<END ....soap response here... END; 

 $xml = simplexml_load_string($source);
 $xml->registerXPathNamespace('t', 'http://www.driver.org'); 
 foreach ($xml->xpath('//t:ResourceIdentifier') as $item)    
 { //  print_r($item);       
     echo $item->asXML();    
 }    
?>

1 Ответ

4 голосов
/ 04 мая 2011

Вы действительно должны использовать встроенный класс SoapClient , если можете или не можете использовать библиотеки PEAR SOAP . Поскольку вы работаете с PHP 5.3, SoapClient должен быть доступен.

Что касается использования вами Xpath, вы запрашиваете неправильное пространство имен и элемент. Пространство имен запрашиваемого элемента: "http://www.driver.org",, поэтому это должно сработать, хотя имейте в виду, что я на самом деле не запускал его, хотя оно должно быть правильным:

<?php
$xml = simplexml_load_string($response); 
$xml->registerXPathNamespace('rid', 'http://www.driver.org');
foreach ($xml->xpath('//rid:ResourceIdentifier') as $item) {
    echo (string) $item; 
}
?>

Но, пожалуйста, не делайте этого, используйте один из двух упомянутых мной клиентов SOAP. Я понятия не имею, откуда вы взяли {http://apilistener.envoyservices.com}payment, поскольку это не упоминается в ответе.

...