2011-08-02 119 views
0

我想解析一個簡單的xml soap響應simplexml_load_string而沒有成功。我已經嘗試了很多方法,而我在其他問題中找到的卻沒有成功。使用simplexml_load_string來解析SOAP XML

的XML是:

<?xml version="1.0" encoding="utf-8" ?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Body> 
    <m:F2bCobrancaRetorno xmlns:m="http://www.f2b.com.br/soap/wsbilling.xsd"> 
     <sacado numero="0000000015"> 
     <nome>Pedro Fernandes Steimbruch</nome> 
     <email>[email protected]</email> 
     </sacado> 
     <cobranca nosso_numero="0004912903" numero="0004912903" taxa_registro="0.00"> 
     <nome>Pedro Fernandes Steimbruch</nome> 
     <email>[email protected]</email> 
     <url>http://www.f2b.com.br/Billing?id=eq5GuK</url> 
     </cobranca> 
     <log>OK&#13;</log> 
    </m:F2bCobrancaRetorno> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

我想記錄和URL的對象。

+0

你只在這裏粘貼了一些XML,但到目前爲止你還沒有顯示你的代碼。 -1 + CV – hakre

回答

0

您可能會考慮它,但該XML文檔使用名稱空間。這就是XML標籤中的冒號的意思。理論上,文檔中給出的URI告訴解析器在哪裏找到該名稱空間中元素的模式。要使用simpleXml完成此操作,您需要解析文件以獲取該名稱空間的URI,或者在此情況下只需對其進行硬編碼即可,例如「http://www.f2b.com.br/soap/wsbilling.xsd」 。然後,將URI傳遞給SimpleXml對象的children()方法。

在此示例中,$ document包含包含SOAP數據的SimpleXML對象。 $ subDocument是一個新的SimpleXML文檔,它包含文檔中位於名稱空間「m」中的元素。

$subDocument = $document->children("http://www.f2b.com.br/soap/wsbilling.xsd"); 
    echo $subDocument->log; 

因爲有兩個命名空間(SOAP_ENV和M),一個嵌套在另一個裏面,我不知道您是否有訪問「SOAP-ENV」之前,你可以進入「M」,或者如果你可以直接跳到「m」。

本頁內容將對此進行討論。 http://www.sitepoint.com/simplexml-and-namespaces/