[PHP+XML]PHPで動的に出力するXMLを読み込む方法

このQ&Aのポイント
  • PHPで動的に出力するXMLを読み込む方法について教えてください。
  • PHPから吐き出されるXMLを読み込むためにはどのような方法がありますか?
  • PHPで出力したXMLファイルをPHPから読み込む方法を教えてください。
回答を見る
  • ベストアンサー

[PHP+XML]PHPで動的に出力するXMLをどのようにして読み込めばいいでしょうか?

こんにちは、どうしても解決ができなくて困っています。 お助け願います。 DBからデータを取得し成形するなどした結果をXMLで出力できるようにPHPを用意しました。 ブラウザから確認でき、XMLをソース表示しても問題ありません。 次にこれを読み込むPHPを書いています。 simplexml_load_fileなどでXMLファイルを開くことはこれまでにもやっていたので、直接XMLファイル名を記述するところに用意したPHPを指定しました。 結果はエラー。 いろいろ検証した結果、PHPがアクションする前にPHPファイルが開かれてしまっている感じ。 DOMDocumentのload()やloadXML()で読み込む方法もトライしましたが結果は同じ・・・。 根本的に間違ってますか? PHPから吐き出されるXMLを読み込むためにXMLファイルを記述するところにPHPスクリプトを指定すること自体が間違っているようにも思っています。 お手数をお掛けいたしますがお教え願います。

  • PHP
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • tongoko
  • ベストアンサー率87% (7/8)
回答No.3

1) simplexml_load_file('./outputxml.php'); のような表示ではなく、URL経由で simplexml_load_file('http://www.example.com/outputxml.php'); として落としましょう。 2) web経由が無理であれば、前述のプログラムを関数にして、 吐き出しを変数で渡します。そして、 simplexml_load_file の代わりに simplexml_load_string で受け取ります。 例えば、 XML出力: outputxml.php <? echo file_get_contents('http://okwave.jp/rss.php'); ?> 処理 : do.php <? $xmldata = simplexml_load_file('./outputxml.php'); ?> ならば、 XML出力: outputxml.php <? function outputxml() { return file_get_contents('http://okwave.jp/rss.php'); } ?> 処理 : do.php <? include 'outputxml.php'; $xmldata = simplexml_load_string(outputxml()); ?> などとします。

その他の回答 (2)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

curl関数で出来そう。 「PHP の cURL モジュールを使用して example.com のホームページを取得する」 http://www.php.net/manual/ja/curl.examples-basic.php

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

javascriptのajax同期通信リクエストみたいなのをphpでするのは困難かも。 XML生成のPHPは実ファイルとしてXMLを書き出すようにして、 読み込みのPHPは exec ('php xml書き出し.php');  // <=セーフモードだとだめですね。 で、XML書き出しプログラムを実行させ 排他readで読めるようになるまで、処理を待つようにして、 読めるようになったら、XMLファイルを読んでパースする。 とすれば出来るかも?

関連するQ&A

  • PHPでXMLファイルを読み込みたい

    PHPを使ってxmlファイルを読み込んで、タグの中のデータなどを読み込んだりしたいです。 ですが、自作のxmlファイルだと simplexml_load_file()で読み込めません。xmlファイルの文字コードを色々と変えて試してみましたが、できませんでした。 ちなみに以下のコードは正常に動きました。Yahoo!のxmlファイルです。 $url = "http://rss.weather.yahoo.co.jp/rss/days/5710.xml"; $rss = simplexml_load_file($url); 出力は「【 25日(金) 嶺北(福井) 】 晴れ - 23℃/8℃ - Yahoo!天気・災害」でした。 何度かやるうちにアルファベットは表示できても日本語が表示できないということもありました。 また、xmlファイルをphpのプログラムに作らせたいです。そのときに、simplexml_load_file()で読み込める日本語も含むxmlファイルをphpで作成するプログラムを教えていただけると嬉しいです。 お願いします。

    • ベストアンサー
    • PHP
  • XML関数

    ちょっとした設定ファイルをXMLファイルで持ち、 DBのように扱いたいのです。 DBで言うselectは「simplexml_load_file()」で補うとして、 updateやinsertみたいなXMLファイルの内容を手軽に変更できるような XML関数はありますでしょうか? XML関数興味を持ち始めたばかりで、おかしな質問かもしれませんが ご回答の程、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpのSimpleXMLでXMLの要素を参照したい。

    フォームからキーワードを受け取り、それを、xmlを参照しながらphpで出力したいのですが、最後の最後でつまずきます。 ------------------ <?php $doc = new domDocument(); // DOMDocumentオブジェクトにより、インスタンスを生成 $doc->load("./beta.xml"); // ファイルからXML文書を読みこむ $kywd = $_REQUEST['kywd']; // フォームからデータを受け取る $nodelist = $doc->getElementsByTagName('keyword'); // 指定した要素名(keyword)の全ての要素を取得 foreach ($nodelist as $node) { // 各要素を参照 if($kywd == $node->textContent){ // もし、フォームから受け取ったデータが要素と一致したら $xurl = $node->namespaceURI; // 要素の名前空間URLを取得して$xurlに代入 $xml = simplexml_load_file("./beta.xml"); // SimpleXMLによってXMLファイルをパースし、simplexml_elementオブジェクトを作成する $parent = $xml->children("$xurl"); // 指定したノードの子ノードの配列を取得 $hairetsu = $parent[0]->children("$xurl"); //取得した配列素$hairetsuに代入 foreach($hairetsu as $key=>$value) { // ちゃんと連想配列になっているか、ためしに出力 print ($key."→".$value."<br />"); } // 連想配列になっていることを確認 print $hairetsu["title"]; // しかし、キーを指定して値を取得しようとすると、なぜか得られない。 } } ?> 問題は最後のほうです。連想配列になっていることは確かに確認できる(titleというキーも、その値もある)のですが、連想配列のキーから値を参照しようとすると、なぜか値がNULLになっていて表示できません。私は趣味でプログラミングをする程度なので、おそらく基本的なところで間違っているのだと思いますが、それがどこだか分かりません。お教え願えないでしょうか。

    • ベストアンサー
    • PHP
  • PHP5でsimple_xml_load_fileするとエラーになっちゃいます。

    simple_xml_load_fileを使ってXMLを読み込んでいるのですが、読み込みの時点でエラーが出てしまいます。 Warning: simplexml_load_file() [function.simplexml-load-file]: input conversion failed due to input error, bytes 0xAD 0xB5 0x3C 0x2F ↑こんな感じです。 原因を探ったところ、XMLファイルのデータ中にローマ数字(I、II、・・)があるとこのようになることが分かりました。 ちなみにsimplexml_load_stringを使用してもほぼ同様のエラーが発生しました。 ローマ数字入りのXMLファイルを読み込むことはできないのでしょうか?ご存じでしたら知恵を拝借したいのですが・・・。 ※SAX、DOMでも読み込めず(T_T)

    • 締切済み
    • PHP
  • PHPで、xmlを書き換えたい

    PHP初心者です。 年月日を記録してあるxmlを、phpから書き換えたいのですが、 動作しなくて困っています。。 現在の年月日は 2011.4.7 で 書き換え後の年月日は 2100.9.9 にしたいです。 「index.html」と「memory.xml」が同じフォルダ内にあります。 ●memory.xmlの内容は以下のとおりです-------------------- <?xml version="1.0"?> <memory>   <year>2011</year>   <month>4</month>   <day>7</day> </memory> ●htmlに以下のphpコードを書きました-------------------- <?php   $memoryFile = 'memory.xml';   if ( $xml = simplexml_load_file ( $memoryFile ) ) {     function changeMemory ( $year, $month, $day ) {       $xml -> year = $year; //年の書き換え       $xml -> month = $month; //月の書き換え       $xml -> day = $day; //日の書き換え       $xml -> asXML ( $memoryFile ); //ファイルに書き出す     }     changeMemory ( 2100 , 9 , 9 );   } ?> どうも、以下の1文が作動してくれない気がします。。 $xml -> asXML($memoryFile); //ファイルに書き出す どなたか原因がわかる方いらっしゃいましたら、 なにとぞご教授よろしくお願いいたします。。

    • ベストアンサー
    • PHP
  • PHP5でのXML保存

    PHP5でsimplexmlを用いて、既にあるXMLファイルを読み込み、データの追加をしたいと考えています。 XMLファイルは以下のような形式です。 <xml> <id ="1"></id> <data>1221</data> <data>1765</data> <id ="2"></id> <data>1221</data> </xml> またデータを追加する際に、id=2の中に追加するなどを指定したいと考えています。 よろしくお願いします。

    • 締切済み
    • PHP
  • twitterのOAuth認証+xml抽出(php

    こんにちは。 PHPのプログラムで分からない部分があるので質問させてください。 twitterAPIを用いてアカウントの情報のxmlを取得し、simplexmlで解析して ・フォロワー数 ・フォロー数 ・リストされている数 ・ツイート数 ・認証アカウントかどうか といったステータスをsimplexml_load_fileで読み込んで、抽出して変数に入れたいのですが・・・ (この変数に入れたステータスで色々と計算をする予定です) エラーが出てファイルを読み込んでくれません。 ユーザー情報を取得するAPIが認証を通さないといけないため、OAuthを用いて認証しています。 認証が必要のないAPIで返ってきたxmlは問題無くsimplexml_load_fileが使えます。 ちなみにさくらのレンタルサーバーのスタンダードで、PHPのバージョンは5.2.17です。 色々試してみたのですが、何が原因なのか分からないので、ご教授お願いします。 <コード> <?php // twitteroauth.phpを読み込む。 require_once("twitteroauth.php"); // Consumer keyの値 $consumer_key = "******"; // Consumer secretの値 $consumer_secret = "*****"; // Access Tokenの値 $access_token = "******"; // Access Token Secretの値 $access_token_secret = "******"; // OAuthオブジェクト生成 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); $req = $to->OAuthRequest("http://api.twitter.com/1/users/show/id.xml","GET",array("user_id"=>"******")); $xml = simplexml_load_file($req) or die("XMLパースエラー"); ?> <実行結果> Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "<?xml version="1.0" encoding="UTF-8"?> <user> <id>*******</id> <name>******</name> <screen_name>******</screen_name> <location>九州</location> <description>webクリエイ ・・・(以下略)・・・ ;。 &am in /home/*********/www/newfile.php on line 20 XMLパースエラー

    • 締切済み
    • PHP
  • PHP5 domDocumentで簡単に深いノードを取得する。但し、SimpleXMLを使わない

    環境はPHP5です。 SimpleXML(simplexml_load_file)を使わない事情がありまして、domDocumentを使っています。 $dom = new domDocument(); $dom->load("example.xml"); $root = $dom->documentElement; foreach($root->childNodes as $elems) { if ($elems->nodeType == XML_ELEMENT_NODE && $elems->nodeName == "Items") { ... ... ... 例えば以下のようなXMLの場合、<D2>のyyyyyを取得する為に上のプログラムだと、 foreach, ifのネストが深くなり、階層が深くなるにつれてプログラムの記述も増えて 非常に面倒ですが、$rootを使って、yyyyyの値を1行程度で取得する方法ないのでしょうか? <A> <Items> <B1></B1> <B2> <C> <D1>xxxxx</D1> <D2>yyyyy</D2> </C> </B2> <B3></B3> </Items> </A>

    • ベストアンサー
    • PHP
  • PHP4でのXMLデータの取り扱い

    Webサービスを利用してXMLデータを取得するスクリプトをPHPで書いています。レンタルサーバの関係でバージョンは4.4.4しか使えません。 XMLを扱う関数というと、PHP5ではsimpleXMLやXMLReaderなどがあるようで、各要素へアクセスするにも $xml=simplexml_load_file('books.xml'); foreach($xml->book as $book){ .... という感じでオブジェクトとしてアクセスできるようですが、こういうのをPHP4で実現する方法はないのでしょうか?例えば入れ子になったデータだと、深い階層にたどりつくために foreach($results as $key => $value){ foreach($value $key2 => $value2){ foreach($value $key3 => $value3){ ... } } } みたいな感じで書いているのですが、まったくスマートではないですし、なにか間違っているような気がします。良い方法があればお教えください。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • XMLのロードに失敗する

    PHP5においてsimplexml_load_fileを使って、様々なサイトのRSS(XML)を読み込もうとしています。 一部のサイトに対してFalseが返ってきます。いまいちコンディションが掴みきれておらず うまくいくことうまくいかないことを記述させていただきます。 PHP設置環境の種類 ローカルサイト上のLinux、レンタルサーバA、レンタルサーバB、レンタルサーバC ターゲットRSS NHK http://www3.nhk.or.jp/rss/news/cat0.xml はてな http://feeds.feedburner.com/hatena/b/hotentry 毎日新聞 http://mainichi.jp/rss/etc/flash.rss 問題となるのは毎日新聞です。環境によって読めたり読めなかったりします。 ローカルでの結果 NHK、はてな、毎日新聞 いずれもOK レンタルサーバA 毎日だけNG レンタルサーバB すべてOK レンタルサーバC 毎日だけNG 今回はこのサーバAやCの問題をクリアしたいのですが方法がわかりません。 simplexml_load_fileがNHKやはてなに対して動作するのに毎日に対してのみ動かないという 観点からすると毎日側の仕様の影響かとも思うのですが、 PHPの設置環境によって動作が変わるという観点も加味すると PHPの設置環境の何かに依存し、読み込み対象が絞られる、というようなイメージを持っています。 いずれも無料サーバということもあり、検討ぐらいつけてから管理人に相談させていただくのが 良いかと思いこの場をお借りしております。 なお、レンタルサーバCは.land.toです。 よろしくお願いいたします。 エラー文 $data = simplexml_load_file($rss); if ($data == FALSE){ echo "Failed loading XML<br>\n"; foreach(libxml_get_errors() as $error) {echo "\t", $simplexml_load_fileerror->message;}//Failed loading XML was the returned error } Warning: simplexml_load_file(http://rss.yomiuri.co.jp) [function.simplexml-load-file]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /home/httpd/****/public_html/php/rss.php on line 9 Failed loading XML failed to load external entity "http://rss.yomiuri.co.jp" なお、rss.phpのline 9は $data = simplexml_load_file($rss);です。

    • ベストアンサー
    • PHP

専門家に質問してみよう