• 締切済み

simplexml_load_fileでのXML

simplexml_load_fileを使ってXML形式のデータを処理したいのですが、 <YDF xmlns="http://olp.yahooapis.jp/ydf/1.0" firstResultPosition="1" totalResultsAvailable="1" totalResultsReturned="1"> <ResultInfo> <Count>1</Count> <Total>1</Total> </ResultInfo> <Feature> <Id>201210191610_139.73229_35.663613</Id> <Geometry> <Type>point</Type> <Coordinates>139.73229,35.663613</Coordinates> </Geometry> <Property> <WeatherAreaCode>4410</WeatherAreaCode> <WeatherList> <Weather> <Type>observation</Type> <Date>201210191610</Date> <Rainfall>1.65</Rainfall> </Weather> <Weather> <Type>forecast</Type> <Date>201210191620</Date> <Rainfall>0.00</Rainfall> </Weather> <Weather> <Type>forecast</Type> <Date>201210191630</Date> <Rainfall>0.00</Rainfall> </Weather> </WeatherList> </Property> </Feature> </YDF> $xml = simplexml_load_file(リクエストURL); 上記のレスポンスが返ってきたとして、2番めのDateを取得しようとした場合 $xml->Feature->Property->WeatherList->Weather[1]->Date; では表示する事が出来ませんでした。 なにが原因でしょうか?

  • PHP
  • 回答数1
  • ありがとう数9

みんなの回答

noname#244856
noname#244856
回答No.1

SimpleXMLは最後に文字列へのキャストが必要なところがネックです。 http://ideone.com/3eZeC7

関連するQ&A

  • simplexml_load_fileについて

    お世話になります。 simplexml_load_fileについて質問です。 下記のようなコードでライブドアブログのRSSを解析しようとしております。 ブログ記事の全文を取得したいのですが、一部分しか取得することが出来ません アドバイスをお願いします。 宜しくお願いします ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $rss = $data['blog_rss']; $xml = @simplexml_load_file($rss,'SimpleXMLElement', LIBXML_NOCDATA); #ブログタイトル $data['xml']['title'] = $xml->channel->title; #ブログ説明 $data['xml']['description'] = $xml->channel->description; #最大件数 $max_lines = 8; $i=0; foreach ($xml->item as $item) { $ns = $item->getNamespaces(true); $date = $item->children($ns["dc"]); //記事のリンク先 $data['xml']['kiji'][$i]['link'] = $item->link; //記事の見出し $data['xml']['kiji'][$i]['title'] = $item->title; //記事の日付 $pubDate = $date->date; $data['xml']['kiji'][$i]['pubDate'] = date("Y年m月d日 H:i:s", strtotime($pubDate)); //記事本文 $desc = $item->description; $data['xml']['kiji'][$i]['desc'] = $desc; $i++; //最大件数に達したときストップ if ($i == $max_lines) break; }

    • 締切済み
    • PHP
  • ヘッダーが付いた場合の、simplexml_load_fileでの取り出し方

    simplexml_load_file()を使って <?xml version="1.0" encoding="UTF-8" ?> - <Response> - <header:Header xmlns:header="http://test.com/"> </header:Header> - <Body> - <itemSearch:ItemSearch xmlns:itemSearch="http://test.com/"> <count>2000</count> <page>1</page> ...... この<count>2000</count> の「2000」を取り出すにはどうしたらよういのでしょうか? echo $Xml->Response->Body->itemSearch->count; このXML文書の構成様式が初めてで(ヘッダーが付いている)、いくらやっても 取得できないので宜しくお願い致します。

    • ベストアンサー
    • PHP
  • simplexml_load_file() のかわりの simplexml_load_string() がエラーになる

    こんにちわ。 お時間あるかた、どうぞよろしくおねがいします。 現在、RSSを読み込んで、色々な処理をしたいと思っています。 そして、下記のコードを書いたところうまくいきました。 $root = simplexml_load_file($url); ところが、使っているレンタルサーバでは PHP.iniのallow_url_fopenをONにすることが禁止されていることを知ったので、 simplexml_load_string()を使うように、プログラムを書き換えました。(下記抜粋) $response = http($url . $parm); $line = explode("\n" , $response); // HTTPヘッダを消す for ( $i=0 ; $i < 100 ; $i++ ) if ( $line[$i] == "" ) break; // HTTPボディーだけ取得 $xml_str = ""; for ( $i++ ; $i < count($line) ; $i++ ) $xml_str .= $line[$i]; $root = simplexml_load_string($xml_str); こうしたところ、一部のRSSで、Error while parsing the documentが出るようになってしまいました。 いくつか試したところ、amebloのフィードはOKなのですが、他のRSSだとエラーになるようです。 $ret = get_rss("http://feedblog.ameba.jp/rss/ameblo/femiohji"); // OK $ret = get_rss("http://pub.ne.jp/marunohi/?action=rss&type=rss1.0"); // NG というわけで、 simplexml_load_file()のときは動いていたのですが、 simplexml_load_string()にしたらエラーになります。 原因がわからず、行き詰まってしまいました。 よろしくおねがいいたします。

    • ベストアンサー
    • PHP
  • 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
  • phpのsimplexml_load_fileについて

    あるXMLのデータをsimplexml_load_fileで実行すると SimpleXMLElement Object ( [Body] => SimpleXMLElement Object ( ) ) という内容が返ってきます。 しかし、そのXMLのデータの内容は <?xml version="1.0" encoding="UTF-8" ?> - <Response> - <header:Header xmlns:header="http://api.rakuten.co.jp/rws/rest/Header"> - <Args> <Arg key="User-Agent" value="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ) Sleipnir/2.5.12">true</Arg> <Arg key="apiVersion" value="111">true</Arg> <Arg key="operation" value="ItemSearch">true</Arg> <Arg key="version" value="2007-10-25">true</Arg> </Args> <Status>Success</Status> <StatusMsg /> </header:Header> - <Body> - <itemSearch:ItemSearch xmlns:itemSearch="http://api.rakuten.co.jp/rws/rest/ItemSearch/2007-10-25"> <count>19244</count> <page>1</page> <first>1</first> <last>30</last> <hits>30</hits> <carrier>0</carrier> <pageCount>100</pageCount> - <Items> - <Item> <itemName>内容1</itemName> <itemCode>crucian:10001064</itemCode> <itemPrice>1</itemPrice> <itemCaption>内容2</itemCaption> <itemUrl>URL1</itemUrl> <affiliateUrl /> <imageFlag>1</imageFlag> <smallImageUrl>画像1</smallImageUrl> <genreId>403911</genreId> </Item> ------------------------------ こんな感じのデータです。 ブラウザでこのXMLを表示させても、この様に表示されます。 SimpleXMLElement Object ( [Body] => SimpleXMLElement Object ( ) ) この結果が意味しているものは、[Body]以下のものは何も返ってきていないという事なのでしょうか? ここから、普通に内容1・内容2・URL1・画像1(上記のXMLデータの内容)を取り出すには、どうすればよいのでしょうか? 教えて頂けると非常に助かります。

    • 締切済み
    • PHP
  • PHPのSimpleXMLについて

    PHPのSimpleXMLについて 閲覧ありがとうございます。PHPでSimpleXMLを用いてxmlのページを解析しているのですが <data> <item date="10/7/13" url="http://yaho.co.jp" type="sample" y="2010" m="7" d="13"> hogehoge </item> このようなサンプルがありdateとurl, hogehogeをそれぞれ$date,$url,$titleの変数に入れたいのですが方法がわかりません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでsimplexml_load_fileの引数に長いURLを指定

    PHPでsimplexml_load_fileの引数に長いURLを指定すると結果が返りません。 file_get_contents でも同様です。 PHP初心者です。 ある程度の長さまで(バイト数不明)までは大丈夫です。 今日一日検索と実験をかなり行いましたが、解決できず困り果てています。 どなたかヒントやアドバイスをいただけると大変助かります。 サーバー  Windows 2008 Server + IIS PHP Ver 5.3.2 【概要】 Yahooの形態素解析APIを使用するため奮闘しています。 http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html 取得したサンプルに倣いエンコードしたテキストをURLに加え送信するのですが A) 短いテキストだとうまくいきますが(UTF8の日本語で900文字ぐらいか)B) 長いテキストたとえばどこかのWebページのテキストすべてなどでは PHP Warningがログに残り失敗ます。 最終的には以下のようなクエリーストリングを生成し(simplexml_load_fileの引数として)送信しようとしています。が送信できていません。 http://jlp.yahooapis.jp/MAService/V1/parse?appid=<yahoo app id>&results=ma&sentence=+%5BPR%5D+2010%E5%B9%B49%E6%9C%8816%E6%97%A5%28%E6%9C%A8%29+%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3+%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83% <長いので途中省略> AA%E5%B7%A5%E4%BC%9A+10%E2%80%9012%E6%9C%88%E6%9C%9F%E3%81%AF%E8%B8%8A%E3%82%8A%E5%A0%B4%E5%85%A5%E3%82%8A%E3%81%AE%E5%85%AC%E7%AE%97%E3%81%8B+%E9%81%8A%E5%9C%92%E5%9C%B0%E3%81%AE%E3%83%87%E3%83%BC%E3%83%88%E3%80%81%E3%83%88%E3%83%83%E3%83%97%E3%81%AF%E8%A6%B3%E8%A6%A7% 【試したこと・わかったこと】 長いURLを送信しようとするとphpのログには2種類のエラーが記録される (ア)PHP Warning: simplexml_load_file(http://jlp.yahooapis.jp <以下上記サンプルのURL続く> (イ)PHP Warning: simplexml_load_file(): I/O warning : failed to load external entity "http://jlp.yahooapis.jp/MAService/V1/parse?<以下上記サンプルのURL続く> テキストを短くすると送信でき期待通りxmlが返ってくる。 上記の元URLをIEのアドレスバーに入力すると xml が正常に返ってくる file_get_contents で同じことを行う場合も同様にエラー(上記エラー(ア)となり値が返らない http://developer.yahoo.co.jp/sample/jlp/sample2.html で紹介されているデモサイトでも同様の問題が起きている模様。。。 http://cgi.geocities.jp/ydevnet/sample/jlp/sample2/ma_sample.php 【関係ありそうな php.ini の現在の設定】 allow_url_fopen = On allow_url_include = On 以上 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Twitterフォロワー数 取得 API xml

    【 Twitterフォロワー数 取得 API xml 】 twitterのフォロワー数を取得しwebsiteに表示したいです。 下記のcodeを記述したのですが、 取得出来ない場合があります。 (Aのサイトですと表示されBのサイトですと表示されない) <?php $urlt = str_replace(0xefbbbf, '', file_get_contents('http://api.twitter.com/1/statuses/user_timeline.xml?id=□□□□□□')); $xmlt = simplexml_load_string($urlt); print $xmlt->status->user->followers_count; ?> ※上記の □□□□□□ 部分には 表示させたいtwitterのscreen_nameかidをいれます。 どうしてもわからずこちらに質問させて頂きました。。。 よろしくお願いいたします。。

    • 締切済み
    • PHP
  • simplexml_load_fileについて

    simplexml_load_fileでrssを読み込んでいるのですが、 rssのxmlファイルが少し特殊でリンクが抜けているitemがあり、 以降ずれ込んで読まれてしまい困っています。 ■xml例 <root> <item> <title></title> <link></link> </item> <item> <title></title> <link></link> </item> <item> <title></title> ←リンクがぬけている </item> <item> <title></title> <link></link> </item> </root> ■php側 抜粋/割愛 $xml = simplexml_load_file($this->xmlPath) or die("ファイルが読み込まれません"); //xpathにて各ノードを取得 $title = $xml->xpath(//title); $link = $xml->xpath(//link); for($i = 0; $i < 3; $i++) { <a href="<?=$link[$i]?>"> <?=$title[$i]?> </a> } のように取得して、html加工して 吐き出しているので、linkがないノードがあると 後のものがどんどんずれて読み込まれてしまいます・・・ どのようにしたら解決できますでしょうか・・・

    • 締切済み
    • PHP
  • simplexml_load_fileについて

    PHP自作RSSでの質問なのですが… <?php $rss = simplexml_load_file("サイトURL"); foreach ($rss->item as $item) { if( $i++ == 5 ) { break; } $dc = $item->children('http://purl.org/dc/elements/1.1/'); $link = $item->link; $title = $item->title; echo "<li><a href=\"$link\" title=\"$title\" target=\"_blank\">$title</a></li><hr>"; } ?> 上記のソースは1サイト内に1つしか設置することが出来ないのでしょうか? 1つのソースで複数のサイトのRSS情報を取得することが出来るのですが サイト別にRSSをまとめたいので出来たら複数のボックスで管理したいです。 ソースで改善することが出来たら一番嬉しいのですが… 他のソースでプログラムを組みなおすことも考えております。 どんな方法でも構いませんのでRSS情報を取得する方法 また別のボックスで管理する方法を教えて頂けましたら嬉しいです。 よろしくお願い致します

    • 締切済み
    • PHP

専門家に質問してみよう