• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:XMLのURLをPHP表示したいのですが)

XMLのURLをPHP表示したいのですが

このQ&Aのポイント
  • XMLをPHPで表示させたくて、PHPファイルを作成しましたが表示されません。原因を特定することができません。
  • XMLファイルには情報があり、PHPファイルも正しく作成されているようですが、表示方法やXMLの形式に問題があるのかもしれません。
  • 質問が不明確で詳しい内容がわかりにくいですが、お力をお借りして解決を図りたいと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • 4017B
  • ベストアンサー率73% (1341/1821)
回答No.3

>simplexml_load_file() で読み込めない~ と言う事はつまり、読み込み元のXMLが正しい構文になっていないと言う事です。 ◆XMLデータ:: <?xml version="1.0" encoding="utf-8"?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="ja"> <feed> <title>たいとる</title> <description>PHPでXMLデータを取得。</description> <link>http://example.com/</link> <language>ja</language> <lastBuildDate>Wed, 02 Nov 2011 00:11:22 +0900</lastBuildDate> <webMaster>hoge@example.com</webMaster> <item> <title>たいとる-001</title> <link>http://www.hoge.com/hage/001.html</link> </item> <item> <title>たいとる-002</title> <link>http://www.hoge.com/hage/002.html</link> </item> <item> <title>たいとる-003</title> <link>http://www.hoge.com/hage/003.html</link> </item> </feed> </rss> ◆PHP:: $file = './test.xml'; $xml_data = simplexml_load_file( $file ); $i = 0; while ( $value = $xml_data->feed->item[$i] ) { $my_data = $value->link; echo "<p>". $my_data ."</p>\n"; $i++; } ~こんな感じOKなはず? P.S. 一応、XML内では大文字小文字、日本語も要素名として使って良い事になってますが。後々、PHPなどでパース処理する事を考えたら、半角英数“小文字”オンリーで統一して置いた方が誤動作を防げます。 上記例文がRSS-2.0に基づいた最小構成のXML構文になるので、これ以上は端折らない方が良いと思います。また要素も、あまり複雑な多重階層にしてしまうと、やはり後からPHPなどでパースする時に面倒かつ誤動作の主たる原因となりますので。基本は <item> 直下に全ての要素を並列化して記述する様に習慣化して置いた方が良いと思います。 最初の例文の様に、 ・Items -> Item-> ItemLinks-> ItemLink-> URL ~などと無駄に階層が深くなると、ヒューマンエラーが続出しますので…。

rabbit-kimura
質問者

お礼

凄いご丁寧にありがとうございました!! >simplexml_load_file() で読み込めない~ そうだったんですね(>_<)勉強になりました!!

その他の回答 (2)

  • 4017B
  • ベストアンサー率73% (1341/1821)
回答No.2

PHP関数の file_get_contents() は、指定されたURL(若しくは変数の値)をそのまま「平のテキストデータ」として読み込む関数です。 なので例文の $article の値は文字列化された生のテキストデータになっているので、foreach で処理する事は出来ません。原則として foreach で処理出来るのは、対象が配列の場合です。 例文の様な処理がしたい場合、simplexml_load_file() の方を使って下さい(PHP5以降のみ)。 何らかの環境的要因で、どうしても file_get_contents() のみで処理しなければならないのなら。 $article に代入された文字列を一つづつ、preg_replace() などで置換処理して行くしか方法はありません。ただし非常に処理時間が掛かりますので、読み込むXMLデータが大きい場合は現実的ではありません。

rabbit-kimura
質問者

お礼

ありがとうございました!!

rabbit-kimura
質問者

補足

ご回答ありがとうございます!! simplexml_load_file()ではどうもXMLが読み込まれなかったので、 file_get_contents()を使っておりました。 バージョンは5なんですが・・・ XMLデータはさほど多くないので、preg_replace() の方試してみます!!

noname#147388
noname#147388
回答No.1

>PHPのファイルはページのソースを確認しても問題ないように見えたので、 ぱっとみ echo $data[ItemLinks->ItemLink asURL]; ではなく echo $data[ItemLinks->ItemLink->URL]; では? ぱっとみなのではずしてたらごめん。

rabbit-kimura
質問者

お礼

早々のご回答、ありがとうございます!! 試させていただきましたが、どうやらエラーになりまして、 解決することができませんでした、すみません(>_<)