- 締切済み
配列のデータ抽出
phpでgoogleニュースをxmlから抽出しようとしているのですが、 /*配列の中身↓*/ [entry] => Array ( [0] => SimpleXMLElement Object ( [title] => googleのニュースです ( [@attributes] => Array ( [href] => http://googlerss.com ) ) と、いつも使っているsimplexml_load_file関数から配列にいれて foreach ($xml->entry->@attributes as $item) { とした所、[@attributes]の@マークでエラーが出てしまいます。 このような場合、どのようにすれば、配列から情報をとれるのでしょうか。 宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- mookun2007
- ベストアンサー率59% (28/47)
関連するQ&A
- simplexmlで取得したデータを配列へ。
PHP5のsimplexml_load_fileでデータにアクセスし、配列に 入れたいのですが、うまくいきません。 $xml = simplexml_load_file($file); $arrayA = array(); foreach($xml->A as $A){ array_push($arrayA, $A); } print_r($arrayA); とすると、 Array ( [0] => SimpleXMLElement Object ( [0] => data1 ) [1] => SimpleXMLElement Object ( [0] => data2 ) [2] => SimpleXMLElement Object ( [0] => data3 ) ) となってしまいます。 そうではなくて、 Array ( [0] => data1 [1] => data2 [2] => data3 ) とデータの中身を直接配列に入れたいのですが、 どうすればよいのでしょうか。 非常に初歩的な質問じゃないかと思うのですが、どなたがご教示 いただけますと有難いです。 どうぞ宜しくお願い致します。
- ベストアンサー
- PHP
- PHPで配列を使ってHTMLソースを取得したいです
RSSで取得したXMLの中身からURLを取得したのですが、 それぞれのソースをループ構文を使って取得する方法はありますか? XMLの中身を配列として表示すると ソース↓ $RSS_data = simplexml_load_file($RSS_url); $i=0; foreach($RSS_data->URL as $value){ $result [$i] ['URL'] = $value->URL; $i++; } echo "<pre>" ; print_r($result) ; echo "</pre>" ; 結果↓ Array ( [0] => Array ( [URL] => SimpleXMLElement Object ( [0] => http://www.~ ) ) [1] => Array ( [URL] => SimpleXMLElement Object ( [0] => http://www~ ) ) [2] => Array ( [URL] => SimpleXMLElement Object ( [0] => http://www.~ ) ) [3] => Array ( [URL] => SimpleXMLElement Object ( [0] => http://www.~ ) ) こんな感じで続いていきます。 このURLの一つ一つのソースを取得したいのですがどうすればいいのでしょうか?
- 締切済み
- PHP
- PHP5でのXMLパーサーについて
PHP5で $xml = simplexml_load_file($url)を使って ヤフーオークションAPIから帰ってきたデータを処理したいのですが、 titleは {$xml->item[0]->title}で取得できることがわかったのですが、 totalAuctionsなど@attributesの中のデータを取得することができません。 どのようにすればよいかご教授願います。 よろしくお願いします。 SimpleXMLElement Object ( [@attributes] => Array ( [totalAuctions] => 3677 [totalPage] => 74 [curPage] => 1 ) [item] => Array ( [0] => SimpleXMLElement Object ( [auctionID] => ***** [title] => ****** [seller] => SimpleXMLElement Object ( [id] => *** [itemlist] =>http://api.auctions.yahoo.co.jp/AuctionWebService/V1/SellingList?sellerID=*** [rating] =>ttp://rating2.auctions.yahoo.co.jp/jp/show/rating?userID=*** ) [url] => http://******************************** [img]=>http://**********************************.jpg [price] => **,000 円 [bids] => ** [endtime] => *月 **日 **時 **分 [reserved] => SimpleXMLElement Object ( ) [option] => SimpleXMLElement Object ( [0] => ) ) ) )
- ベストアンサー
- PHP
- AppStoreのランキングを配列に入れたい
AppStoreから取得したゲームアプリのランキングを連想配列に入れて、 アプリ名から順位を呼び出せるようにしたいのですが、 以下のコードを実行するとbool(false)になり、原因がどうしてもわかりません。 PHPのバージョンは5.3.3です。 <?php /* ランキングをXMLで取得 */ $xml = simplexml_load_file('https://itunes.apple.com/jp/rss/topgrossingapplications/limit=100/genre=6014/xml'); /* 10位までのタイトルと順位を配列にする */ $apprank = array(); for($a = 0; $a < 10; $a++) { $title_maker = $xml->entry[$a]->title; $rank = $a+1; preg_match("/.+(?=-)/", $title_maker, $title); $title =$title[0]; $apprank += array("$rank" => "$title"); } /* 「パズル&ドラゴンズ」の順位を呼び出す */ $matches = array_search("パズル&ドラゴンズ", $apprank); var_dump($matches); ?> $apprankの中身をvar_dumpで見ると、[1]=>string(28) “パズル&ドラゴンズ ” となるので、取得したアプリ名はちゃんと配列に収まっていると思うのですが、 array_searchでひっかからないのは何故でしょうか……?
- ベストアンサー
- PHP
- 添え字が表示できない
simplexml_load_fileでXMLデータを解析して、ある添え字を表示したいのですが上手く表示されません。 (PHPバージョンは5です) 解析結果 ++++++++++++++++++++ SimpleXMLElement Object ( [A] => SimpleXMLElement Object ( [B] => Array ( [0] => SimpleXMLElement Object ( [aa] => あいうえお [bb] => かきくけこ [cc] => さしすせそ ) [1] => SimpleXMLElement Object ( [dd] => たちつてと [ee] => なにぬねの [ff] => はひふへほ ) [2] => SimpleXMLElement Object ( [gg] => まみむめも [hh] => やゆよ [ii] => らりるれろ ) <以下省略> ++++++++++++++++++++++++++++++++++++++++ この、0,1,2,・・・を表示させたくて foreach($xml->A->B as $key => $val){ echo "[$key},"; } としても、「0,1,2,」ではなく 「B,B,B,」と表示されてしまいます。 「0,1,2,」と表示させるにはどう記述すればよいのでしょうか??
- ベストアンサー
- 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要素を階層指定して取得しようとすると、NULLになるのですが…
$xml要素を階層指定して取得しようとすると、NULLになるのですが…。 ▽元のXMLファイル(楽天トラベルAPI) <Response> _<Body> __<KeywordHotelSearch:KeywordHotelSearch> ___<hotel> ____<hotelBasicInfo> _____<hotelNo>7531</hotelNo> _____<hotelName>パークハイアットホテル</hotelName> ▽$xml = simplexml_load_string($xml);した際の、var_dump($xml) object(SimpleXMLElement)#1 (2) { ["headerHeader"]=> object(SimpleXMLElement)#2 (3) { ["Args"]=> object(SimpleXMLElement)#4 (1) { ["Arg"]=> array(7) { [0]=> string(4) "true" [1]=> string(4) "true" [2]=> string(4) "true" [3]=> string(4) "true" [4]=> string(4) "true" [5]=> string(4) "true" [6]=> string(4) "true" } } ["Status"]=> string(7) "Success" ["StatusMsg"]=> object(SimpleXMLElement)#5 (0) { } } ["Body"]=> object(SimpleXMLElement)#3 (0) { } } object(SimpleXMLElement)#8 (0) { } この後、$items = $xml->Body->KeywordHotelSearchKeywordHotelSearch->hotel->hotelBasicInfo; とやると、$itemsが NULL になるのですが、何故でしょうか? (※KeywordHotelSearch:の:は、simplexml_load_stringする前に、str_replaceで処理済です) ちなみに、$items = $xml->Body->KeywordHotelSearchKeywordHotelSearch;では、$itemsは下記になります。 object(SimpleXMLElement)#4 (0) { }
- ベストアンサー
- PHP
- 異なるページへ配列を渡したいのですが、うまくいきません。どうすればよい
異なるページへ配列を渡したいのですが、うまくいきません。どうすればよいでしょうか? ■現状 APIへアクセスを行い、 simplexml_load_stringを使って、 カテゴリー階層部分を取得して、配列$hitsへ格納しています。 $xml = simplexml_load_string (引数); $hits = $xml->カテゴリー階層部分; これを別ページへ丸まる渡す方法が分かりません。 ネットで検索したところ、 フォームの隠し項目で配列データを渡したい時、という項目があり、 自分がやりたいケースにあてはまるかなと思い試してみたのですが、うまくいきませんでした。 ▽配列データをエンコード、デコードして送受信する - 覚え書き PHP Sample http://antonsan.net/study/php/php013.php ■試してみた内容 ▽渡す前のページ <form action="**.php" method="get"> <input type="hidden" name="array_enc" value="<?php echo base64_encode(serialize($hits)) ?>"> ▽渡した後のページ print_r(unserialize(base64_decode(@$_GET["array_enc"]))); var_dump($hits); ▽画面でのエラー表示 Warning: unserialize() [function.unserialize]: Node no longer exists in **.php on line 5 SimpleXMLElement Object Warning: print_r() [function.print-r]: Node no longer exists in **.php on line 5 ( ) NULL ■ やりたいことは、別ページへ配列を渡したいだけなのですが、どうすればよいのでしょうか? (特にエンコード、デコード等にこだわりはありません)
- ベストアンサー
- PHP
- RSSのXMLロードで失敗してしまう
RSSのデータを取得する、という処理を行いたいのですが、 文字コードの件でひっかかってしまっているようで なかなか前に進むことができません。 ************ // RSSの内容を取得する $rss_text = file_get_contents(※RSSのフィードURL); // RSSの文字エンコーディングを変換→再変換 $rss_text = mb_convert_encoding($rss_text, 'SJIS', 'UTF-8'); $rss_text = mb_convert_encoding($rss_text, 'UTF-8', 'SJIS'); $rss_text = preg_replace('/[\x00-\x1f]/', '', $rss_text); // RSSをパースする $rss_xml = new SimpleXMLElement($rss_text); if ($rss_xml) { // XML解析に成功した場合 // SimpleXMLElementオブジェクトからデータを取得 $items = $rss_xml->item; foreach($items as $item) { echo 'ID:'. $item->guid. '<br />'; echo 'リンク:'. $item->link. '<br />'; echo '日付:'. $item->pubDate. '<br />'; echo 'タイトル:'. $item->title. '<br />'; echo '本文:'. $item->description. '<br />'; } } ************ こういったコードを組んでいるのですが、現状では Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : attributes construct error in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Couldn't find end of Start Tag rss line 1 in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Extra content at the end of the document in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... このようなエラーが表示されてしまいます。 自分なりに文字コードを処理しているつもりではあるのですが、 他にも何かしなければならないことがあるのでしょうか? どうぞ知恵を貸していただければと思います。 よろしくお願いいたします。
- ベストアンサー
- PHP
- simplexml_load_fileを使用してblogのRSSを読み
simplexml_load_fileを使用してblogのRSSを読み込み、ページ内に表示させたいのですが 下記のスクリプトでは楽天とlivedoorのRSSの読み込みが出来ません。 色々検索してみたのですがこれといった解決法を発見できなかったので質問させていただきます。 どうぞよろしくお願いいたします。 <?php $xml = simplexml_load_file('RSSをここに入力'); $i = 0; foreach($xml->channel->item as $item) { if(++$i>5) break; $title = (string)$item->title ; $link = (string)$item->link ; echo ("<li><a href=".$link.">".$title."</a></li><br />"); } ?>
- ベストアンサー
- PHP
お礼
ありがとう御座います。 試してみましたが、ダメでした>_< foreach ($xml->entry as $item) { で[title]の値は取れるので構造は問題なさそうなんですが・・・ どうなんでしょう・・・