結果をXML形式で返すウェブサービス (Web API) を使うことがある。そこで、PHPでXMLデータをパースする方法を覚え書き。
PHP5のSimpleXMLエクステンションを使うと簡単
PHP5にはSimpleXMLと呼ばれるXML操作のための拡張モジュールが含まれている。SimpleXMLの関数を使うと、XMLを簡単にオブジェクトに変換可能。
PHP: SimpleXML – Manual
https://php.net/manual/ja/book.simplexml.php
PHP: XML 操作 – Manual
https://php.net/manual/ja/refs.xml.php
サンプルコード
1 2 3 4 5 |
$url = "http://api.example.com/?option1=param1&option2=param2"; $contents = file_get_contents($url); $contents = mb_convert_encoding($contents, "UTF-8", "auto"); //必要なら $data = simplexml_load_string($contents); print_r($data); |
XMLデータにCDATAセクションが含まれていると上のコードでは読めない。その場合、以下のように変更する。
1 |
$data = simplexml_load_string($contents, 'SimpleXMLElement', LIBXML_NOCDATA); |
XML用語事典 [CDATAセクション]
http://www.atmarkit.co.jp/aig/01xml/cdata.html
パースしたXML要素はオブジェクトのプロパティとして参照できる。たとえば $data->section->item という感じ。開発途中でprint_r()関数などを使ってダンプしておくとXML要素の特定は楽になる。
参考サイト
SimpleXML | PHP プログラミング解説
http://www.crystal-creation.com/web-app/tech/programming/php/xml/simple-xml.htm
PHP SimpleXMLでXMLパースをするときの注意点まとめ – ウッディーの日記
http://blog.livedoor.jp/gnoot/archives/51371942.html