simplexml_load_fileでxmlの要素にアクセス出来なかった。

  • このエントリーをはてなブックマークに追加
  • LINEで送る

tumblrのxmlを読み込んで画像を表示しようと思ったので

simplexmlでxmlを読みこむが何故だか画像urlの要素にアクセス出来ない。

(結論を先に見る)

tumblr APIの説明和訳
http://(you).tumblr.com/api/read|うちのtumblrのxml

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>&lt;/blockquote&gt;</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>
[/xml]

この中のphoto-urlのどれかが欲しいので最初にこう書いた。
tumblr.php
[php]
$xml=simplexml_load_file("http://dobinn69.tumblr.com/api/read");
$pu=$xml->posts->post->photo-url[0];
[/php]
するとこんなエラーが。
表示結果
[text]Parse error: syntax error, unexpected ‘[‘ in ファイル名 on line 2[/text]
あるぇ?

なんでかなぁなんでかなぁと検索してみるけど配列へのアクセスは別に間違ってないようだ。

試しに適当なxmlを作って上記方法でアクセスすると取得出来た。

test.xml
[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>
[/xml]
test.php
[php]
<?php

$xml=simplexml_load_file("test.xml");
//print_r($xml);
$test=$xml->posts->post->testText[0];
print($test);
?>
[/php]

表示結果
[text]test00[/text]

そして結論

二つを見比べてみる、どうも要素名にハイフンが入っているのが問題らしい気がする。

さっそくgoogleで「xml ハイフン」と検索してみると結構でてきた!
simplexml_load_fileの問題じゃなかったわけだ。

よってこんな風に変更
[php]$pu=$xml->posts->post->{"photo-url"}[0];
[/php]

参考:92. ハイフン付きのメンバ変数名を参照する方法

中括弧とクォーテーションで囲います。こうすることでハイフンが使われている要素名も参照できるようになります。

なるほどー。

  • このエントリーをはてなブックマークに追加
  • LINEで送る

SNSでもご購読できます。

コメント

  1. オメガ スーパーコピー 口コミ より:

コメントを残す


You can add images to your comment by clicking here.