PHP他

PHP SimpleXML オブジェクト@(アットマーク)attributes のアクセス

PHP で Amazon Product Advertising API を利用して受け取った検索結果の XML データは、SimpleXML のオブジェクトで取り込むことで処理も容易になる。のだが、属性データのアクセスでつまづいて年を越してしまった。次のようなオブジェクトの [@attributes] が、どうやってアクセスしたらいいか分からなかったのである。

SimpleXMLElement Object
(
    [Argument] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [Name] => Timestamp
                            [Value] => 2010-01-02T13:34:57Z
                        )
                )

            [1] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [Name] => Version
                            [Value] => 2009-10-01
                        )
                )

年も改まったので、早速 Google 先生にお尋ねしたところ、どなたかのブログのメモ「PHPのsimplexmlで読み込んだXMLの@attributesにアクセスする方法」がヒットした。

なるほど、

$name = $xml->Argument[0]->attributes()->Name;
$value = $xml->Argument[0]->attributes()->Value;

とアクセスすればいいわけか。

ただし、$name も $value もオブジェクトなので、文字列として利用したい場合は、次のようにキャストしておくと良い。

$name = (string) $xml->Argument[0]->attributes()->Name;
$value = (string) $xml->Argument[0]->attributes()->Value;