如何解析SOAP XML:剝離SimpleXML 的命名空間前綴
解析SOAP XML 文件時,命名空間ml 可能會給simplex 等庫帶來挑戰。當遇到類似以下內容的XML 回應時,就會出現此問題:
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <PaymentNotification xmlns="http://apilistener.envoyservices.com"> <payment> <!-- Payment data --> </payment> </PaymentNotification> </soap:Body> </soap:Envelope>
嘗試使用simplexml 解析此類XML 字串,例如以下程式碼,通常會導致空白結果:
$xml = simplexml_load_string($soap_response); $xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/'); foreach ($xml->xpath('//payment') as $item) { print_r($item); }
要解決此問題並成功解析帶有命名空間前綴的SOAP XML,一種簡單而有效的方法是在將XML 傳遞給simplexml 之前去除這些前綴。其實作方式如下:
$your_xml_response = '<Your XML here>'; $clean_xml = str_ireplace(['SOAP-ENV:', 'SOAP:'], '', $your_xml_response); $xml = simplexml_load_string($clean_xml);
透過刪除命名空間前綴,XML 變得更容易 simplexml 解析。產生的 SimpleXMLElement 物件將包含嵌套在
以上是如何使用 SimpleXML 有效率地解析帶有命名空間前綴的 SOAP XML?的詳細內容。更多資訊請關注PHP中文網其他相關文章!