解析 SOAP XML:实用的解决方案
由于命名空间前缀的存在,解析 SOAP XML 响应的任务可能会令人畏惧。当使用 simpleXML 等内置 PHP 函数时,这可能会导致意外结果。
挑战:
解析 SOAP XML 需要寻址命名空间前缀,这可能会掩盖所需的内容元素。考虑以下 SOAP XML 响应:
<br><?xml version="1.0"encoding="utf-8"?><br><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/"><br> </p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><PaymentNotification xmlns="http://apilistener.envoyservices.com"> <payment> <uniqueReference>ESDEUR11039872</uniqueReference> <epacsReference>74348dc0-cbf0-df11-b725-001ec9e61285</epacsReference> <postingDate>2010-11-15T15:19:45</postingDate> [Additional payment information] </payment> </PaymentNotification></p> <p>肥皂:身体><br>肥皂:信封><br></p> <p><strong>The解决方案:</strong></p> <p>一种有效的简化方法SOAP XML 解析就是消除名称空间前缀。这可以通过在将 XML 传递给 simpleXML 之前修改 XML 来实现:</p> <pre class="brush:php;toolbar:false">$xml_response = '<SOAP XML here>'; $clean_xml = str_ireplace(['SOAP-ENV:', 'SOAP:'], '', $xml_response); $xml = simplexml_load_string($clean_xml);
现在,您可以访问所需的“付款”元素,而不会遇到命名空间前缀引起的问题:
foreach ($xml->PaymentNotification->payment as $item) { print_r($item); }
这种简单的方法将返回“ payment ”元素及其所有子元素及其值。
以上是如何在 PHP 中有效解析 SOAP XML 响应以避免命名空间前缀问题?的详细内容。更多信息请关注PHP中文网其他相关文章!