速攻!WEBプログラム養成講座

アキオ技術記録とそれを活かしてみなさまのスキルアップを目指します

XML ルート要素の属性値取得方法

PHPにはいくつかXMLのパーサー(解析ライブラリ)が搭載されていますが

今回ルートにある属性値を取得するのに結構手こずりましたので手法をお伝えいたします。

まずは以下のようなXMLがあったとします。

<ResultSet xmlns="urn:xxxmaker:com:api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" firstResultPosition="0" totalResultsAvailable="2811" totalResultsReturned="10">
<Result>
<Title>
名刺交換会</Title>
<CompanyName/>
<Place/>
<Date>2015-04-14 15:00:00</Date>
<AgeMan/>
<AgeWoman/>
<Url>
http://domain.jp
</Url>
<AreaName>新宿</AreaName>
<Article>aaaaaaaaaaaaaaaaaaaa</Article>
<Image>
http://domain.jp/test.jpg
</Image>
</Result>
 
上記のルート要素はResultSetです。通常
SImpleXMLは、XMLを解析し要素から属性取得できますが上記のような
ルート要素にある属性は取得できないようでした。
 
そこで以下のような手法で属性を取りました。
//PHPのDOM宣言
$doc = new DOMDocument();

//XMLの値を取得
$doc->load( $file );

$xpath = new DOMXPath($doc);

//ルート要素なので何もパスをセットしない
$result = $xpath->query('@totalResults');

echo $result->item(0)->value;

ここでポイントなのがxpathです。

xpathとは

xml内で任意の場所を指し示す手法です。

つまり、パス指定です。

ルートからなので何も指定しない(/などの階層区切りはしない)

状態で@(属性)の指定をしています。

属性totalResultの結果を$resultに格納しています。