2010年10月28日

PHP : XML の内容を new DOMDocument(); と getElementsByTagName で簡単に取得する

このテスト使った XML は、Amazon の Product Advertising API で取得した
商品情報とレビューが入った XML データです。
( もうすぐレビューデータは直接取得できなくなりますが )

XML の構造が事前に決まっている場合、道の曲がり角を順番に目印にしたがって
曲がって行くようにして目的の場所を特定します。(曲がり角の目印が、要素名です)

getElementsByTagName で取得されるのは、nodeList なので、その要素が一つしか
なければ目的の曲がり角は、nodeList->item(0) になります。これは node なので、
再び getElementsByTagName で目的場所を絞って行き、最後の場所で目的のテキスト
である末端の node( テキストノード ) の値を取得します。
<?
header( "Content-Type: text/html; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

// XML の内部は utf-8 です。
$xml = file_get_contents( "http://localhost/am.xml" );

// 新規のドキュメントを作成します
$doc = new DOMDocument();

// 文字列内の XML をセットします
$doc->loadXML($xml);

// ツリーを順番たどって値を取得します
$nodeList = $doc->getElementsByTagName("Item");
$nodeList = $nodeList->item(0)->getElementsByTagName("SmallImage");
$nodeList = $nodeList->item(0)->getElementsByTagName("URL");
print $nodeList->item(0)->textContent;

print "<hr>";

// ツリーを順番たどって値を取得します
// ( textContent と firstChild->nodeValue はどちらも同じ目的のテキストです )
$nodeList = $doc->getElementsByTagName("CustomerReviews");
$nodeList = $nodeList->item(0)->getElementsByTagName("Review");
$nodeList = $nodeList->item(0)->getElementsByTagName("Content");
print $nodeList->item(0)->firstChild->nodeValue;

?>

関連する記事

PHP : XML の内容を DOMXPath クラスで簡単に取得する


posted by at 2010-10-28 16:33 | 処理 | このブログの読者になる | 更新情報をチェックする