PHPでXMLをパースするときに効率が上がる方法
PHPでXMLをパースするケースが多々ありますが、その際アトリビュートやネームスペースの問題でなかなかうまく目的のタグの内容が取得できない場合があります。
その時にとっても頼りになるのがXML_UnserializerってPEARのクラスです。
XMLをズゴンと配列に入れてくれます。
インストール方法
# pear install http://download.pear.php.net/package/XML_Serializer-0.18.0.tgz
XML_SerializerをインスコするとXML_Unserializerがついてきます。
PHPでの使い方はこんな感じ
AmazonからISBNを使って本情報を取得。
<?php require_once 'XML/Unserializer.php'; $amazonid = ""; //ISBNから本を1件出力 $isbn = $_GET['isbn']; $url = "http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId={$amazonid}&Operation=ItemLookup&IdType=ASIN&ItemId={$isbn}&ResponseGroup=Images,Small"; $xml = <<<EOD <item> EOD; $file = file_get_contents( $url ); $Unserializer =& new XML_Unserializer( array('parseAttributes' => true, 'targetEncoding' => 'utf-8' ) ); $status = $Unserializer->unserialize($file); if (PEAR::isError($status)) { die($status->getMessage()); } $xml = $Unserializer->getUnserializedData(); var_dump( $xml ); exit; ?>
出力サンプルはこちら
array(3) { ["xmlns"]=> string(60) "http://webservices.amazon.com/AWSECommerceService/2005-10-05" ["OperationRequest"]=> array(3) { ["RequestId"]=> string(36) "69408fb5-2ef5-4cd5-a3d3-cfa1f6c788bf" ["Arguments"]=> array(1) { ["Argument"]=> array(6) { [0]=> array(2) { ["Name"]=> string(7) "Service" ["Value"]=> string(19) "AWSECommerceService" } [1]=> array(2) { ["Name"]=> string(9) "Operation" ["Value"]=> string(10) "ItemLookup" } 〜 省略 〜 ["Creator"]=> array(2) { ["Role"]=> string(6) "翻訳" ["_content"]=> string(13) "西沢 直木" } ["Manufacturer"]=> string(27) "オライリージャパン" ["ProductGroup"]=> string(4) "Book" ["Title"]=> string(31) "初めてのPHP & MySQL 第2版" } } } }