for文を止めたい!XMLからtitleを取り出す方法とは?

このQ&Aのポイント
  • for文を使用してXMLからtitle要素を取り出し、15個の要素を出力するphpのコードです。
  • しかし、title要素が存在しない場合も<div></div>が無限に出力されてしまう問題があります。
  • どのようにすればtitle要素が存在しない場合にfor文を止めることができるのか、教えてください。
回答を見る
  • ベストアンサー

for文をとめたい。

XMLを読み込んで、その中の「title」を取り出すphpです。 titleが取れなかった場合でも<div></div>が15に達するまで出力され続けてしまいます。困ります。 title要素がない場合に繰り返しを止めたいのですがどうすればいいのでしょうか? よろしくお願いします。 <?php $xml = "" $xml = simplexml_load_file($xml, 'SimpleXMLElement', LIBXML_NOCDATA); for( $i = 0; $i < 15; $i++ ) { $item = $xml->item; $title[$i] = $item[$i] ->title; $mix = "<div class='title'>".$title."</div>"; $output = $output.$mix; } echo "document.write(\"$output\")"; ?>

noname#181054
noname#181054
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

こんにちわ。 こちらではfor ですので、foreachの例になりますが、 break は使えませんか? http://nyx.pu1.net/reference/control/break.html if($title[$i]) == "") break;

noname#181054
質問者

お礼

まさにこれです!! ありがとうございます、助かりました。

関連するQ&A

  • 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
  • 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について

    お世話になります。 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で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
  • 配列のデータ抽出

    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
  • 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
  • PHPで以下のサイトのrssの情報を獲得したいのですが、なぜか<ite

    PHPで以下のサイトのrssの情報を獲得したいのですが、なぜか<item>を獲得できません。 rss: http://twib.jp/rss phpコード: $rss =simplexml_load_file('http://twib.jp/rss'); print_r($rss); $title =$rss->channel->title; echo $title; foreach ($rss->channel->item as $item) { echo $item->title; echo $item->description; echo $item->link; echo $item->pubDate; } どなたか、どこを直せばよいか教えていただけないでしょうか。

    • 締切済み
    • PHP
  • PHPでヤフオクの検索とかしたいのですが。

    いまいちよくわかりません。 $xml = simplexml_load_file($req)をやり ヤフーからのレスポンスをXML形式でうけとり、$xmlに格納することはできたのですが、どうやって値を引き出したらいいのかわかりません。 アイテムの商品名と現在価格の値を表示させたいのですが echo $xml->result->item[0]->title; とかやってもだめでした。どういう構造で$xmlに格納されてるのかいまいちわからないです。ヤフーデベロッパーのページもみたけどよくわからないので、教えてください。 環境はvistaのxamppです。

    • ベストアンサー
    • PHP

専門家に質問してみよう