- ベストアンサー
添え字が表示できない
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,」と表示させるにはどう記述すればよいのでしょうか??
- sutesute00
- お礼率40% (17/42)
- PHP
- 回答数3
- ありがとう数5
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
別に変数を用意するしかないかも C/C++が関心カテゴリに入っているのでイテレータに関する知識があるものとする(ってか俺は最近になって漸く読んでいる) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/ で,SimpleXMLIteratorが何を返すかというとcurrent 【Element】で http://www.php.net/~helly/php/ext/spl/classSimpleXMLIterator.html#5f004fc95d995ef6512d2e557c4bac45 やってみるとわかるが, <?php $xml = simplexml_load_file("Q3725013-1.xml"); foreach ($xml->A->B as $B){ print_r($B); } ?> の出力結果は SimpleXMLElement Object ( [0] => あ ) SimpleXMLElement Object ( [0] => い ) SimpleXMLElement Object ( [0] => う ) となってしまう。$Bからいくら取り出そうとしたって, keyは0としか返ってこない
その他の回答 (2)
- SAYKA
- ベストアンサー率34% (944/2776)
>xmlの場合は何でこうなるのか http://www.php.net/manual/ja/ref.simplexml.php DOMでもそうだけど単純な連想配列じゃないのがXMLのツリーだから、nodeNameか何かで持ってこないと表示できないんじゃないかな。 そんな気がするよ。
お礼
普通の連想配列とは違うんですね。。 わざわざありがとうございました♪
- SAYKA
- ベストアンサー率34% (944/2776)
>$xml->A->B ↓こうだとどう? $xml["A"]["B"]
補足
そうすると Warning: Invalid argument supplied for foreach() とエラーが出てしまいました。 普通の連想配列の場合は、0,1,2,と表示されると思うのですが xmlの場合は何でこうなるのか謎です・・・。
関連するQ&A
- $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
- 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
- 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
- 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
- 配列の要素を表示しない
PHP初心者です、宜しくお願いいたします。 下のような配列を表示させるソースを書きましたが、要素を表示しません。 どこが間違っているのかさっぱり分かりません。誰かお助けください。 <?php $color3 = array(0 => " red ", 1 => " green ", 2 => " blue "); foreach($color3 as $key => $val) { echo "現在の添え字は ". $key . "<br/><br/>"; echo "現在の要素は ". $Val . "<br/>"; } ?> 以下のような表示になり、要素が表示されません。 現在の添え字は 0 現在の要素は 現在の添え字は 1 現在の要素は 現在の添え字は 2 現在の要素は
- ベストアンサー
- PHP
- object(SimpleXMLElement)#9 (2) {~~エ
object(SimpleXMLElement)#9 (2) {~~エラーが出ます Twitter でBot運営してます。 定期ポスト指定をしてから この表示が出ます。 リプライは、普通にできてます。 下記表示は、何を意味してるんでしょうか? 教えてください。 object(SimpleXMLElement)#9 (2) { ["request"]=> string(20) "/statuses/update.xml" ["error"]=> string(22) "Status is a duplicate." }
- ベストアンサー
- PHP
- PHPでHTMLをXMLに変換したときに消える内容
教えてください。 スクレイピングのために、よく分からないままに、 PHPでHTMLをXMLに変換して、Xpathで参照しようとしています。 が。 その前段で、「HTML内に存在する内容が、XMLに変換した際に 消えてしまう」という現象に悩まされております。 例を挙げますと、 --------------------------------------- <html> <body> <table> <tr> <td><b>foo</b> bar<br> </td> </tr> </table> </body> </html> --------------------------------------- みたいなページを、 --------------------------------------- <?php $html = file_get_contents('http://xxxxxxxxxxxxxxxxx.com/foobar.html'); $dom = new DOMDocument(); @$dom->loadHTML($html); $xml = simplexml_import_dom($dom); print_r($xml); ?> --------------------------------------- のように処理すると、 --------------------------------------- SimpleXMLElement Object ( [body] => SimpleXMLElement Object ( [table] => SimpleXMLElement Object ( [tr] => SimpleXMLElement Object ( [td] => SimpleXMLElement Object ( [b] => foo [br] => SimpleXMLElement Object ( ) ) ) ) ) ) --------------------------------------- のような結果になって、「あれ?fooはいるけど、barは何処いった?」となります。 分かっている方には、「そりゃ、おまえ、あたりまえだよwww」 「つーか、なにやっとんのwww」って感じなのかもしれませんが、 さっぱり分かりません。 元のHTMLの書きぶりがダメだからということでしょうか。 お手数をお掛けしますが、どうぞ、ご教授ください。 よろしくお願いいたします。
- ベストアンサー
- PHP
- 配列のデータ抽出
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]の@マークでエラーが出てしまいます。 このような場合、どのようにすれば、配列から情報をとれるのでしょうか。 宜しくお願いします。
- 締切済み
- 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
- 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
お礼
別に変数を用意したらいけました。 普通の連想配列とはわけが違うんですね。