今扱っている案件で、XMLを読み込んで、ごにょごにょする機会があり、はまったことがあったので、メモとして残します。
PHPのXML読み込み実装の中でも、かなり使えるXML_Unserializerですが、以下のようなXMLを読み込んで、なおかつ、articleタグのtypeやidのような属性までも取得したい場合、オプションを設定する必要があることがわかりました。
<articles> <article type="news" id="ID10001"> <title>記事1</title> </article> <article type="news" id="ID10002"> <title>記事2</title> </article> </articles>
やり方は、簡単で、XML_UnserializerのsetOptionメソッドで、parseAttributesをTrueに設定すれば良いだけでした (オプション一覧)。以下はPHP5の読み込みまでの例。
<?php require_once("XML/Unserializer.php"); $xml = file_get_contents("sample.xml"); $obj = new XML_Unserializer(); $obj->setOption("parseAttributes", true); $status = $obj->unserialize($xml); if ($status === true) { $dat = $obj->getUnserializedData(); print_r($dat); } ?>
pear の XML_Serializer, XML_Unserializerは、未だにバージョンは beta のままですが、一度これに慣れてしまうと非常に便利で手放せないモジュールになると思います。
Tags: PHP XML