如何解析 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 对象将包含嵌套在
以上是如何使用 SimpleXML 高效解析带有命名空间前缀的 SOAP XML?的详细内容。更多信息请关注PHP中文网其他相关文章!