PHPにはいくつかXMLのパーサー(解析ライブラリ)が搭載されていますが
今回ルートにある属性値を取得するのに結構手こずりましたので手法をお伝えいたします。
まずは以下のようなXMLがあったとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<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は、Result要素から取得できますが上記のような
ルート要素にある属性は取得できないようでした。
そこで以下のような手法で属性を取りました。
1 2 3 4 5 6 7 8 9 10 11 12 |
//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に格納しています。
メルマガ登録をお願いします。
素敵な?情報がいつもあなたに届くようになります。(itmnewsの記事が届きます。)お役に立つかどうかわかりませんが頑張りますっ。登録してみてください。