2011-05-04 174 views
1

最近幾天我試圖解析soap響應(通過curl命令行),但我無法讓它工作。我只想得到ResourceIdentifier的對象值,即rs-1304500829200-200。我使用PHP 5.3.x如何在PHP中解析SOAP響應

<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();  
}  
?> 
+0

請參閱:http://stackoverflow.com/editing-help – Treffynnon 2011-05-04 11:54:54

+0

「print_r」的輸出是什麼? – 2011-05-04 11:55:46

+0

爲什麼選擇CURL而不是http://www.php.net/manual/en/book.soap.php? – Treffynnon 2011-05-04 11:56:40

回答

4

你真正應該使用內置的SoapClient class如果可以的話,或者如果你不能,使用PEAR SOAP libraries。在運行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,因爲它沒有在響應中提到。

+1

這種惡意軟件太苛刻了!我無法在我的答案中看到任何可以證明它的理由。 – 2011-05-04 12:09:26

+0

我在您的評論前刪除了我的投票,因爲我看到了您的修改。清除你的緩存:)我之前忘了留下一個評論來描述投票。你沒有解決這個問題,只是評論。 – Treffynnon 2011-05-04 12:13:53

+0

很酷。我養成了一個習慣,首先對那些誤入歧途的人提出警告,然後,如果他們完全按照他們的計劃行事,告訴他們出了什麼問題。我不認爲評論是與人們討論他們提出的問題(格式,短語,細節)而不是任何答案的地方,我會告訴他們使用經過良好測試的圖書館作爲後者。 – 2011-05-04 12:27:19