- ベストアンサー
PHPでXMLファイルを読み込む方法とは?
- PHPを使ってxmlファイルを読み込んだり、データを取得する方法について解説します。
- 自作のxmlファイルをsimplexml_load_file()で読み込む際に発生する問題や対策について説明します。
- PHPでxmlファイルを作成する方法についてもご紹介します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
確定できないけど、一番疑わしいのは単純に自作XMLが、標準のXML書式の作法に則ってないからでは無いかな…? phpで扱うテキストは種類を問わず、問答無用で全て「UTF8、BOM無し、改行LF」にする。コレが鉄則です。それ以外ではそもそもphp上では動作保証されてません。外部ファイルを読み込む時も同様です。 >日本語が表示出来ない 具体的に。「日本語が表示されない」なのか、それとも「日本語が読めない(文字化け)」なのか??トラブル、即ち自分の置かれた環境や問題点を、第三者にも正しく理解出来る様に言語化出来るかどうか。これはphp等のプログラミング能力とも比例関係にあります。 ・日本語が表示されない→XML内のデータ自体を読み取れて無い可能性。 ・日本語が読めない(文字化け)→文字コード改行が正しく処理されてない。 正しく作法に則って作られたXMLなら、日本語が含まれていても問題無くphp内でも処理されます。またphpでXMLファイルを書き出す専門プログラムという物はありません。XML自体、ただの標準書式に則って作成されるただの「テキストファイル」に過ぎません。 従ってXMLに特化した関数などは無く。単純に元からある fopen や fwrite などの標準関数を組み合わせて、テキストファイルとして書き出したファイルに、後から人為的に拡張子等を付けて「XMLファイル」などと呼んでるに過ぎません。テキストデータを出力する時に、XMLの書式に則って書き出せばXMLとなり。HTMLの書式に則って書き出せばHTMLとなるだけの話です。 従って作者自身が既に「XMLの書式やルールに精通している」事が大前提になります。 …とは言いつつも、phpには様々なライブラリが配布公開されてます。"SimpleXML" もその1つですね。なので "SimpleXML" を徹底的に使い倒せば、色んな事が可能になります。「php xml 書き出し」などで検索すれば、色々なサンプルや作成事例が出て来ると思います。 P.S. 最近はver.によって書式がブレるXMLは捨てて、テキストデータは全て「JSON形式」にしていこう!~と言うのが流行りの様です。自分も基本的にはXMLよりもJSONの方が加工し易いかなあと思います(同じデータをローカルからJavascriptでも使えるし)。元々、XML自体が「人間に分かり易いデータ形式」と言うものだったので。可読性を重視すれば、その分プログラム側には難読性が増してしまう仕様は避けられない運命だったのかも…?
お礼
分かりやすく説明していただきありがとうございます! UTF8、BOM無し、改行:LFのみ(Unix)で試して見たいのですが、エラーが返ってきました(いろいろ試した時にも出ました)。 Warning: simplexml_load_file(): I/O warning : failed to load external entity "test.php" in C:\xampp\htdocs\index.php on line 44 Notice: Trying to get property of non-object in C:\xampp\htdocs\index.php on line 45 44、45行目は以下のコードです。 $xml = simplexml_load_file("test.php"); echo $xml->item[0]; 「php xml 書き出し」で調べてみます。xmlはプログラムが作成するものしか、読み込まないので、プログラムに作成させたほうが都合がいいです。 JSON形式への流れがあるという現在の傾向まで教えていただき感謝です。今はXMLを使ってみたいので、XMLでお願いします。(XMLの難読さを体験してからのほうがJSON形式の素晴らしさがわかる可能性もありますし。)
補足
質問に補足です。Yahoo!のXMLを読み取るプログラムは $url = "http://rss.weather.yahoo.co.jp/rss/days/5710.xml"; $rss = simplexml_load_file($url); echo $rss->channel->item->title; でした。echoをするのを忘れていました。出力は「【 25日(金) 嶺北(福井) 】 晴れ - 23℃/8℃ - Yahoo!天気・災害」です。