SOAP-XML analysieren: Eine praktische Lösung
Die Aufgabe, SOAP-XML-Antworten zu analysieren, kann aufgrund des Vorhandenseins von Namespace-Präfixen entmutigend sein. Dies kann zu unerwarteten Ergebnissen führen, wenn integrierte PHP-Funktionen wie simpleXML verwendet werden.
Die Herausforderung:
Das Parsen von SOAP-XML erfordert die Adressierung von Namespace-Präfixen, die das Gewünschte verschleiern können Elemente. Betrachten Sie die folgende SOAP-XML-Antwort:
<br><?xml version="1.0" binding="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> <soap:Body></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>
Die Lösung:
Eine effektive Möglichkeit, das SOAP-XML-Parsing zu vereinfachen besteht darin, die Namespace-Präfixe zu eliminieren. Dies kann erreicht werden, indem das XML geändert wird, bevor es durch simpleXML geleitet wird:
$xml_response = '<SOAP XML here>'; $clean_xml = str_ireplace(['SOAP-ENV:', 'SOAP:'], '', $xml_response); $xml = simplexml_load_string($clean_xml);
Jetzt können Sie auf das gewünschte „Zahlungs“-Element zugreifen, ohne auf Probleme durch Namespace-Präfixe zu stoßen:
foreach ($xml->PaymentNotification->payment as $item) { print_r($item); }
Dieser unkomplizierte Ansatz gibt das Element „Zahlung“ mit allen seinen untergeordneten Elementen und ihren Werten zurück.
Das obige ist der detaillierte Inhalt vonWie kann ich SOAP-XML-Antworten in PHP effizient analysieren, um Probleme mit Namespace-Präfixen zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!