ここでは、XMLから要素オブジェクトを取得する方法を見てみます。
サンプルとしてlivedoorのお天気情報サービス(Livedoor Weather Web Service / LWWS)を
使用しています。
http://weather.livedoor.com/forecast/webservice/rest/v1?city=84&day=today
XML DOM関数で、特定のタグ名から要素オブジェクトを取得するにはget_elements_by_tagname()
を使用します。
livedoorのお天気情報サービス(Livedoor Weather Web Service / LWWS)を例に取得して見ます。
get_elements_by_tagname()関数に'image'というタグ名を指定することで要素を取得します。
<?php $request = "http://weather.livedoor.com/forecast/webservice/rest/v1?city=84&day=today"; $weatherxml = file_get_contents($request); $dom = @domxml_open_mem($weatherxml, (DOMXML_LOAD_PARSING | DOMXML_LOAD_COMPLETE_ATTRS | DOMXML_LOAD_SUBSTITUTE_ENTITIES | DOMXML_LOAD_DONT_KEEP_BLANKS )); //imageタグの取得 $element = $dom->get_elements_by_tagname('image'); var_dump($element); ?>
取得結果は、次のようになります。
array(2) { [0]=> object(domelement)(4) { ["type"]=>int(1) ["tagname"]=>string(5) "image" [0]=>int(4) [1]=>int(160009608) } [1]=>object(domelement)(4) { ["type"]=>int(1) ["tagname"]=>string(5) "image" [0]=>int(5) [1]=>int(160028384) } }
ここで得られた結果は、ノードは要素(Element)でxml文書中に2箇所タグが出現します。
取得できた要素がElementであるかどうかは、typeでわかります。typeが1の場合
(定数:XML_ELEMENT_NODE)となりElementであることがわかります。
要素オブジェクトを取得するもうひとつの方法は、child_nodes()を使用することです。
先ほどのimage要素から子要素を取得します。
<?php $request = "http://weather.livedoor.com/forecast/webservice/rest/v1?city=84&day=today"; $weatherxml = file_get_contents($request); $dom = @domxml_open_mem($weatherxml, (DOMXML_LOAD_PARSING | DOMXML_LOAD_COMPLETE_ATTRS | DOMXML_LOAD_SUBSTITUTE_ENTITIES | DOMXML_LOAD_DONT_KEEP_BLANKS )); //imageタグの取得 $element = $dom->get_elements_by_tagname('image'); $nodes = $element[0]->child_nodes(); var_dump($nodes); ?>
この例では、1つ目imageタグから子要素を取得しています。結果は、次のようになります。
array(5) { [0]=> object(domelement)(4) { ["type"]=>int(1) ["tagname"]=>string(5) "title" [0]=>int(6) [1]=>int(157581840) } [1]=> object(domelement)(4) { ["type"]=>int(1) ["tagname"]=>string(4) "link" [0]=>int(7) [1]=>int(157581520) } [2]=> object(domelement)(4) { ["type"]=>int(1) ["tagname"]=>string(3) "url" [0]=>int(8) [1]=>int(162447808) } [3]=> object(domelement)(4) { ["type"]=>int(1) ["tagname"]=>string(5) "width" [0]=>int(9) [1]=>int(160469272) } [4]=> object(domelement)(4) { ["type"]=>int(1) ["tagname"]=>string(6) "height" [0]=>int(10) [1]=>int(158364184) } }
Copyright 1997-2010 BBB All rights reserved.