てるてるブログ

てるてるぼうずの日常やらお勉強やら

SimpleXMLElementでXMLを配列に

Posted on | 3月 7, 2012 | 1 Comment&trackback

APIのお勉強でお世話になってる”simplexml_load_file“。
APIの提供はXMLとかJSONとかのフォーマットが多いのですが、そのXMLを読み込んでデータを引っ張ってくるのに便利なのです。
先日のエントリー「BOT作成メモ ー お天気API」でも大変お世話になってます。

ちなみにphp5からの取扱のようです。


例えば読み込みたいXMLがライブドアのお天気APIで東京の今日の天気だとします(下記のURL)。
http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=today

↓のように読み込んであげると配列として吐き出されます。
後は配列をあれこれいじって自分の使いたい情報に加工。

<?php
$ten_xml = simplexml_load_file("http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=today");

//出力用
print_r("<pre>");
print_r($ten_xml);
print_r("</pre>");
?>

多次元な配列です…

各要素には「->」を使って入れ子の中へ中へと辿って行く感じでアクセス。

↓はタイトルと天気・天気概況(?)を取り出した例。

$title = $ten_xml -> title;
$telop = $ten_xml -> telop;
$descri = $ten_xml -> description;

属性を指定して取り出したい場合はattributes()を使います。
お天気APIだと属性付きがあまりないみたいですが、むりやりlocation内のarea属性を取り出させると。

$attributes = $ten_xml -> location -> attributes() -> area;

要素が複数ある場合は配列と同じようにキーを指定してあげるといいみたい。
複数あるpinpointの4番目の要素(新宿)を取り出してみます。

$pinpon = $ten_xml -> pinpoint -> location[3] -> title;

全部まとめて↓

<?php
$ten_xml = simplexml_load_file("http://weather.livedoor.com/forecast/webservice/rest/v1?city=63&day=today");

//各要素
$title = $ten_xml -> title;
$telop = $ten_xml -> telop;
$descri = $ten_xml -> description;

//属性にアクセス
$attributes = $ten_xml -> location -> attributes() -> area;

//複数の要素がある場合キーを指定
$pinpon = $ten_xml -> pinpoint -> location[3] -> title;

print("<p>".$title."<br />");
print($telop."<br />");
print($descri."</p>");

print("<p>属性にアクセス<br />".$attributes."</p>");

print("<p>複数の要素(4番目の要素)<br />".$pinpon."</p>");
?>

ちなみに取り出した配列はオブジェクト型(?)。
なんで文字列として使いたい場合は”string”等を使って変換するっぽいです。

ちなみにオブジェクト型とかなんとか…あまり詳しく分かってません(- -;)
そういうとこから理論的にやってった方がお勉強もはかどるんだろうな…と思いつつ。

よくわかるPHPの教科書
たにぐち まこと
« »
トラックバックURL:

Comments

One Response to “SimpleXMLElementでXMLを配列に”

トラックバック

Leave a Reply





*

About

てるぼうず

てるてるぼうずな日常やらお勉強やら

旧ブログ倉庫 »
旧ブログの記事をお探しの方はこちらから

Admin