2016-10-09 1 views
0

SO, Je reçois la réponse SOAP suivante comme une chaîne:Parsing réponse SOAP avec PHP

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <GetListItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
      <GetListItemsResult> 
       <listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"> 
        <rs:data ItemCount="3"> 
         <z:row ows_DocIcon="jpg" ows_LinkFilename="18380014229851.jpg" ows_Modified="2016-10-08 17:27:40" ows_Editor="179440;#asdf" ows_Last_x0020_Modified="2;#2016-10-08 17:29:29" ows_ID="2" ows_Created_x0020_Date="2;#2016-10-08 17:27:40" ows_FileLeafRef="2;#18380014229851.jpg" /> 
         <z:row ows_DocIcon="jpg" ows_LinkFilename="18380014229851_2.jpg" ows_Modified="2016-10-08 17:27:40" ows_Editor="179440;#asfd" ows_Last_x0020_Modified="3;#2016-10-08 17:29:29" ows_ID="3" ows_Created_x0020_Date="3;#2016-10-08 17:27:41" ows_FileLeafRef="3;#18380014229851_2.jpg" /> 
         <z:row ows_DocIcon="jpg" ows_LinkFilename="18380014229851_3.jpg" ows_Modified="2016-10-08 17:27:40" ows_Editor="179440;#asdf" ows_Last_x0020_Modified="4;#2016-10-08 17:30:03" ows_ID="4" ows_Created_x0020_Date="4;#2016-10-08 17:27:41" ows_FileLeafRef="4;#18380014229851_3.jpg" /> 
        </rs:data> 
       </listitems> 
      </GetListItemsResult> 
     </GetListItemsResponse> 
    </soap:Body> 
</soap:Envelope> 

Je cherche à obtenir chacun des « z: ligne » entrées, mais me bats en raison de les espaces de noms (après quelques recherches sur google c'est ce que je comprends qu'ils soient appelés).

Voici le code que je utilise:

$xml = simplexml_load_string($sp->soapClient->__last_response); 

foreach($xml->GetListItemsResult as $item) 
{ 
    $ns_li = $item->children('uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'); 
    $ns_rs = $ns_li->children('urn:schemas-microsoft-com:rowset'); 
    $ns_z = $nr_rs->children('#RowsetSchema'); 
    echo $ns_z->row; 
} 

En ce moment, je reçois pas de sortie de echo. Qu'est-ce que je fais mal?

Répondre

0

Vous pouvez utiliser l'expression XPath pour obtenir une partie spécifique d'un document XML en utilisant divers critères. Par exemple, pour obtenir z:row éléments partout dans le document XML, vous pouvez simplement faire //z:row, après avoir enregistré le préfixe z:

$xml->registerXPathNamespace("z", "#RowsetSchema"); 
foreach($xml->xpath('//z:row') as $item) 
{ 
    echo $item["ows_LinkFilename"] ."\n"; 
} 

eval.in demo

sortie:

18380014229851.jpg 
18380014229851_2.jpg 
18380014229851_3.jpg