首页 >后端开发 >php教程 >如何使用 SimpleXML 高效解析带有命名空间前缀的 SOAP XML?

如何使用 SimpleXML 高效解析带有命名空间前缀的 SOAP XML?

Susan Sarandon
Susan Sarandon原创
2024-11-28 09:22:16478浏览

How to Efficiently Parse SOAP XML with Namespace Prefixes Using SimpleXML?

如何解析 SOAP XML:剥离 SimpleXML 的命名空间前缀

解析 SOAP XML 文档时,命名空间前缀可能会给 simplexml 等库带来挑战。当遇到类似于以下内容的 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 对象将包含嵌套在 下的所需数据。和。该技术允许您根据需要方便地操作和访问解析的 SOAP XML 数据。

以上是如何使用 SimpleXML 高效解析带有命名空间前缀的 SOAP XML?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn