SoapなXMLをPHPでparseする
2020-01-07 php
こういうSoapなXML(?)をパースする場合、children メソッドを使って名前空間を明示的に指定することでパースできる。以下例。
<?php
$input = '<?xml version="1.0" encoding="UTF-8"?>
<ns1:Env xmlns:ns1="http://dummy/ns1/" xmlns:ns2="http://dummy/ns2/" xmlns:ns3="http://dummy/ns3/">
<ns1:Tag1>
<ns2:Tag2>
<ns3:Tag3>
<ns3:Data1>データ1</ns3:Data1>
<ns3:Data2>データ2</ns3:Data2>
<ns3:Params>
<ns3:p1>パラメータ1</ns3:p1>
<ns3:p2>パラメータ2</ns3:p2>
</ns3:Params>
</ns3:Tag3>
</ns2:Tag2>
</ns1:Tag1>
</ns1:Env>';
// エラー抑制
libxml_use_internal_errors(true);
$xml = simplexml_load_string($input);
$xmlErrors = libxml_get_errors();
libxml_clear_errors();
if (count($xmlErrors) > 0) {
var_export($xmlErrors);
exit;
}
// ns3:Tag3 にアクセス
$ns3 = $xml
->children("ns1", true)->Tag1
->children("ns2", true)->Tag2
->children("ns3", true)->Tag3;
// 値を取り出す
var_dump(
(string)$ns3->Data1,
(string)$ns3->Data2,
(string)$ns3->Params->p1,
(string)$ns3->Params->p2
);
// string(10) "データ1"
// string(10) "データ2"
// string(16) "パラメータ1"
// string(16) "パラメータ2"
≪ 2020-01-10
正月の日記
2020-01-06 ≫
Windows PowerShell で tail