simplexml_load_fileでxmlの要素にアクセス出来なかった。
- 2010年 3月 6日
- php
- タグ: simplexml, tumblr —
- Comments (0)



tumblrのxmlを読み込んで画像を表示しようと思ったので
simplexmlでxmlを読みこむが何故だか画像urlの要素にアクセス出来ない。
(結論を先に見る)
tumblr APIの説明|和訳
http://(you).tumblr.com/api/read|うちのtumblrのxml
xml抜粋
<?xml version="1.0" encoding="UTF-8"?> <tumblr version="1.0"> <tumblelog name="dobinn69" timezone="US/Eastern" title="新規ドキュメント">やっとタイトルを変えて写真変更の仕方が分かったレベル</tumblelog> <posts start="0" total="5178"> <post id="423624165" url="http://dobinn69.tumblr.com/post/423624165" url-with-slug="http://dobinn69.tumblr.com/post/423624165/x-117-suzukichiyo-ak47-naha" type="photo" date-gmt="2010-03-03 05:44:38 GMT" date="Wed, 03 Mar 2010 00:44:38" unix-timestamp="1267595078" format="html" reblog-key="bcque5Cz" slug="x-117-suzukichiyo-ak47-naha"> <photo-caption></blockquote></photo-caption> <photo-link-url>http://ffffound.com/image/2c4ba8b6bcb787992657ac8266ce5ddbc20588bd</photo-link-url> <photo-url max-width="1280">http://dobinn69.tumblr.com/photo/1280/423624165/1/tumblr_kyfivkpZ7u1qzlhmu</photo-url> <photo-url max-width="500">http://29.media.tumblr.com/tumblr_kyfivkpZ7u1qzlhmuo1_500.jpg</photo-url> <photo-url max-width="400">http://27.media.tumblr.com/tumblr_kyfivkpZ7u1qzlhmuo1_400.jpg</photo-url> <photo-url max-width="250">http://26.media.tumblr.com/tumblr_kyfivkpZ7u1qzlhmuo1_250.jpg</photo-url> <photo-url max-width="100">http://28.media.tumblr.com/tumblr_kyfivkpZ7u1qzlhmuo1_100.jpg</photo-url> <photo-url max-width="75">http://25.media.tumblr.com/tumblr_kyfivkpZ7u1qzlhmuo1_75sq.jpg</photo-url> </post>
この中のphoto-urlのどれかが欲しいので最初にこう書いた。
tumblr.php
$xml=simplexml_load_file("http://dobinn69.tumblr.com/api/read");
$pu=$xml->posts->post->photo-url[0];
するとこんなエラーが。
表示結果
Parse error: syntax error, unexpected '[' in ファイル名 on line 2
あるぇ?
なんでかなぁなんでかなぁと検索してみるけど配列へのアクセスは別に間違ってないようだ。
試しに適当なxmlを作って上記方法でアクセスすると取得出来た。
test.xml
<?xml version="1.0" encoding="utf-8"?> <aaa> <posts> <post> <testTitle>test-title</testTitle> <testText>test00</testText> <testText>test10</testText> <testText>test20</testText> <testText>test30</testText> <testText>test40</testText> </post> </posts> </aaa>
test.php
<?php
$xml=simplexml_load_file("test.xml");
//print_r($xml);
$test=$xml->posts->post->testText[0];
print($test);
?>
表示結果
test00
そして結論
二つを見比べてみる、どうも要素名にハイフンが入っているのが問題らしい気がする。
さっそくgoogleで「xml ハイフン」と検索してみると結構でてきた!
simplexml_load_fileの問題じゃなかったわけだ。
よってこんな風に変更
$pu=$xml->posts->post->{"photo-url"}[0];
中括弧とクォーテーションで囲います。こうすることでハイフンが使われている要素名も参照できるようになります。
なるほどー。
関連記事かもしれん:
- 新しい記事:Dreamweaverのカスタムショートカット
- 古い記事:zen-codingとDreamweaverメモ
php カテゴリー内の

