SOAP XML の解析: 実用的なソリューション
SOAP XML 応答を解析するタスクは、名前空間プレフィックスが存在するため、困難になる場合があります。これにより、simpleXML などの組み込み PHP 関数を使用する場合、予期しない結果が生じる可能性があります。
課題:
SOAP XML の解析には、名前空間プレフィックスのアドレス指定が必要であり、目的の内容がわかりにくくなる可能性があります。要素。次の SOAP XML 応答を考えてみましょう:
<br><?xml version="1.0"coding="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>
解決策:
効果的な方法の 1 つSOAP XML 解析を簡素化するには、名前空間プレフィックスを削除します。これは、simpleXML に渡す前に XML を変更することで実現できます:
$xml_response = '<SOAP XML here>'; $clean_xml = str_ireplace(['SOAP-ENV:', 'SOAP:'], '', $xml_response); $xml = simplexml_load_string($clean_xml);
これで、名前空間プレフィックスによって引き起こされる問題が発生することなく、目的の 'payment' 要素にアクセスできるようになります:
foreach ($xml->PaymentNotification->payment as $item) { print_r($item); }
この単純なアプローチでは、「payment」要素とそのすべての子要素およびその値が返されます。
以上が名前空間プレフィックスの問題を回避するために、PHP で SOAP XML 応答を効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。