2010年10月29日

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

一番注意するのは、「名前空間の登録」です。あとは、ルートから順に指定して行くのですが
途中で同じ要素が繰り返されている場合は[n] で指定します。( n は、1 から始まります )

<?xml version="1.0" encoding="utf-8"?>
<ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
  <OperationRequest>
    <RequestId>48862558-e642-43b7-96dc-dbb2b5ddcc1f</RequestId>
    <Arguments>
      <Argument Name="Operation" Value="ItemLookup"/>
      <Argument Name="Service" Value="AWSECommerceService"/>
      <Argument Name="Signature" Value="5dkEOxK2XReEF7Tf7EGOo5XTyBwZwayfww4w0+m7jI0="/>
      <Argument Name="ItemId" Value="B000062X90"/>
      <Argument Name="AWSAccessKeyId" Value="MySubscriptionId"/>
      <Argument Name="Timestamp" Value="2010-10-25T10:20:51Z"/>
      <Argument Name="ResponseGroup" Value="Large"/>
    </Arguments>

<?
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);

// DOMXPath オブジェクトを作成します
$xpath = new DOMXPath($doc);

// ネームスペースを登録します
$xpath->registerNamespace( 'n', "http://webservices.amazon.com/AWSECommerceService/2005-10-05");

// n: で表現した xpath を作成します
$query = '/n:ItemLookupResponse/n:Items/n:Item/n:SmallImage/n:URL';

$entries = $xpath->query($query);
print $entries->item(0)->textContent;

print "<hr>";

// n: で表現した xpath を作成します
// ( 複数ある場合は、[1] が先頭
$query = '/n:ItemLookupResponse/n:Items/n:Item/n:CustomerReviews/n:Review[1]/n:Content';

$entries = $xpath->query($query);
print $entries->item(0)->textContent;

print "<hr>";

$query = '/n:ItemLookupResponse/n:Items/n:Item/n:CustomerReviews/n:Review[3]/n:Content';

$entries = $xpath->query($query);
print $entries->item(0)->textContent;

?>

xpath の記法は XPath の例 を参考にします。

関連する記事

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


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