PHP4.4.8でxmlを表示する方法

このQ&Aのポイント
  • PHP4.4.8を使用してxmlを表示する方法を探しています。
  • http://www.phppro.jp/school/mashup/vol3/2のソースコードを試した結果、天気予報の最高気温と最低気温しか表示されなかったので、解決策を教えてください。
  • 以下のコードは、東京の明日の天気予報を表示する関数です。
回答を見る
  • ベストアンサー

PHP4.4.8でxmlを表示する方法

PHP Version 4.4.8 Apache 2.0 Handler 上記環境でxmlをphpで参照する方法を探しているのですが http://www.phppro.jp/school/mashup/vol3/2 のソースコードをそのまま貼って試してみたら ------------------------------ ライブドアの天気予報を表示する 最高気温度 最低気温度 ------------------------------ としか表示されませんでした。どなたか解決法を教えて頂けないでしょうか。 <?php //ライブドアの天気予報を表示する関数その2 function lwws2($city,$day){ //XMLデータ取得用ベースURL $req = "http://weather.livedoor.com/forecast/webservice/rest/v1"; //XMLデータ取得用リクエストURL生成 $req .= "?city=".$city."&day=".$day; //XMLファイル内容を全て文字列に読み込む $buf = file_get_contents($req); preg_match_all('@<title>(.*?)</title>.*?<description>(.*?)</description>.*?<image>.*?<title>(.*?)</title>.*?<url>(.*?) </url>.*?</image>.*?<temperature>.*?<max>.*?<celsius>(.*?)</celsius>.*?</max>.*?<min>.*?<celsius>(.*?)</celsius>.*?</min>.*?</temperature>@s', $buf, $match, PREG_SET_ORDER); $ret = '<div class="lwws">'; $ret .= "<div>".$match[0][1]."</div>"; $ret .= "<div><img src=\"".$match[0][4]."\" alt=\"".$match[0][3]."\"></div>"; $ret .= "<div>".$match[0][2]."</div>"; $ret .= "<div>最高気温".$match[0][5]."度</div>"; $ret .= "<div>最低気温".$match[0][6]."度</div>"; $ret .= "</div>"; return $ret; } echo "<h1>ライブドアの天気予報を表示する</h1>\n"; //リクエストパラメータ設定 $city = "63"; //東京を設定 $day = "tomorrow"; //tomorrow(明日の天気)を設定 //ライブドアの天気予報を表示する関数をコールする echo lwws2($city,$day); ?>

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

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

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

PHP 6でも再現。 正規表現リテラル文字列(っていうかわからんけど)の url要素の終了タグ直前に半角空白が何故か存在している。 これを取り除けばとりあえず動く

mooooooood
質問者

お礼

回答ありがとうございます! 空白を削除したら正常に動きました。

関連するQ&A

  • xhtmlの最初の行に半角スペースが入ってしまいます(APIの天気予報を、PHP+smarty〔xhtml〕で表示したい)

    APIの天気予報を、PHP+smartyで表示しようと思います。しかし表示された画面のソースを見ると、xhtmlの最初の行に半角スペースが入って、htmlと認識されてしまいます。原因は以下のファイルのようなのですが、なにか原因がありますでしょうか?ちなみに、<?phpはファイルの先頭に、?>の後の改行はありません、文字コードはutf-8bom無しです 以下のファイルにidをpostしています。どうかご教授いただけないでしょうか?.......................................................... $documentroot = dirname( __FILE__) . '/'; require_once $documentroot . '../../php_libs/config/config.inc.php'; require_once("jsphon2/Jsphon.php"); require_once ("Net/UserAgent/Mobile.php"); require_once ("Net/IPv4.php"); require_once( _SMARTY_LIBS_DIR . "Smarty.class.php"); $smarty = new Smarty(); $smarty->template_dir = _SMARTY_TEMPLATES_DIR; $smarty->compile_dir = _SMARTY_TEMPLATES_C_DIR; $smarty->config_dir = _SMARTY_CONFIG_DIR; $smarty->cache_dir = _SMARTY_CACHE_DIR; $smarty->caching = 2; if(isset($_POST['id'])){ //ライブドアの天気予報を表示する関数 function lwws($city,$day){ //XMLデータ取得用ベースURL $req = "http://weather.livedoor.com/forecast/webservice/rest/v1"; //XMLデータ取得用リクエストURL生成 $req .= "?city=".$city."&day=".$day; //XMLファイルをパースし、オブジェクトを取得 $xml = simplexml_load_file($req) or die("XMLパースエラー"); $lwwsarea = $xml->pinpoint->location->title; $lwwstitle = $xml->title; $lwwsimage = $xml->image->url; $lwwsalt = $xml->image->title; $lwwsmax = $xml->temperature->max->celsius; $lwwsmin = $xml->temperature->min->celsius; $lwwsdescription = $xml->description; $ret = '<div class="lwws">'; $ret .= '<div>'.'<span style="color:#ff0000;"></span>'.$lwwsarea.'の天気</div>'; $ret .= '<div style="background-color:#fce6f3">'.$lwwstitle."</div>"; $ret .= "<br /><div><img src=\"".$lwwsimage."\" alt=\"".$lwwsalt."\" /></div>"; $ret .= "<div>最高気温".$lwwsmax."度</div>"; $ret .= "<div>最低気温".$lwwsmin."度</div>"; $ret .= "<div>".$lwwsdescription."</div>"; $ret .= "</div>"; return array ($ret,$lwwsarea,$lwwstitle); } function lwws2($city,$day){ //XMLデータ取得用ベースURL $req = "http://weather.livedoor.com/forecast/webservice/rest/v1"; //XMLデータ取得用リクエストURL生成 $req .= "?city=".$city."&day=".$day; //XMLファイルをパースし、オブジェクトを取得 $xml = simplexml_load_file($req) or die("XMLパースエラー"); $ret = '<div class="lwws2">'; $ret .= '<div style="background-color:#fce6f3">'.$xml->title."</div>"; $ret .= "<br /><div><img src=\"".$xml->image->url."\" alt=\"".$xml->image->title."\" /></div>"; $ret .= "<div>最高気温".$xml->temperature->max->celsius."度</div>"; $ret .= "<div>最低気温".$xml->temperature->min->celsius."度</div>"; $ret .= "<br />"; $ret .= "</div>"; return $ret; } //リクエストパラメータ設定 $city = $_POST['id']; //場所を設定 $day = "today"; //今日の天気 $day2 = "tomorrow"; $day3 = "dayaftertomorrow"; //ライブドアの天気予報を表示する関数をコールする list($ret, $lwwsarea1, $lwwstitle1) = lwws($city,$day); $ret2 = lwws2($city,$day2); $ret3 = lwws2($city,$day3); //キャッシュの残り時間を生成 $now=time() +(60 * 24); $asu=time() +(60 * 60 * 24); $y=date("Y", $asu); $m=date("m", $asu); $d=date("d", $asu); $asu_byou= mktime(0, 0, 0, $m, $d, $y); $sa= $asu_byou - $now; } $smarty-> assign ('lwws1' , $ret); $smarty-> assign ('lwws2' , $ret2); $smarty-> assign ('lwws3' , $ret3); $smarty-> assign ('lwwsarea', $lwwsarea1); $smarty->assign('city', $city); $cache_id = $city; //あすの0:00までの秒数をセットする $smarty->cache_lifetime = $sa; if ($smarty->is_cached("weather.tpl", $cache_id)){ $smarty->display("weather.tpl", $cache_id); exit(); } $smarty->display("weather.tpl", $cache_id);

    • ベストアンサー
    • PHP
  • php4でxmlを取得してページに表示

    http://www.phppro.jp/school/mashup/vol3/2 を参考に以下コードを書いたのですが、記事を1件表示させるだけでなく別の記事も複数件表示させたい場合はどうすれば良いのでしょうか。 また、<dc:type>番付</dc:type>のものだけを抜き出す方法も教えていただけると嬉しいです。宜しくお願い致します。 <?php function news(){ //XMLデータ取得用ベースURL $req = "http://polls.dailynews.yahoo.co.jp/rss.xml"; //XMLファイル内容を全て文字列に読み込む $buf = file_get_contents($req); preg_match_all('@<item>.*?<title>(.*?)</title>.*?<link>(.*?)</link>.*?<description>(.*?)</description>.*?<dc:subject>.*?</dc:subject>.*?<dc:type>(.*?)</dc:type>.*?</item>@s', $buf, $match, PREG_SET_ORDER); $ret .= "<h1><a href=\"".$match[0][2]."\">".$match[0][1]."</a></h1>"; $ret .= "<div>".$match[0][3]."【".$match[0][4]."】</div>"; return $ret; } echo news(); ?>

    • ベストアンサー
    • PHP
  • xml による表示のしかたについて

    素人による基礎的な質問で恐縮いたします。 どうしても 今の問題でつまづいてしまつて、中々先に進めないので 意を決してここで質問することにしました。 時間をとらせてすみません。 ■ xml シート <?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="01.xsl"?> <map> <pref>北海道 <city>札幌市 <div>中央区</div> <div>東区</div> <div>北区</div> <div>白石区</div> </city> <city>函館市</city> <city>小樽市</city> <city>旭川市</city> <city>室蘭市</city> </pref> <pref>青森県 <city>青森市</city> <city>弘前市</city> <city>八戸市</city> </pref> </map> ■ xsl シート <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>全国地域名</title> </head> <body> <h3 align="left">地域名リスト</h3> <td> <xsl:apply-templates /></td> </body> </html> </xsl:template> <xsl:template match="map"> <xsl:for-each select="pref"> <p><xsl:value-of select="city" /></p> </xsl:for-each> </xsl:template> </xsl:stylesheet> ■ 上記の記述に基づけば 次の表示になってしまいます。 地域名リスト 札幌市 中央区 東区 北区 白石区 青森市 ■私が望んでいる表示は下記のようなものです。 どのように xslシートを 書いたら下記のように表示できるでしょぅか。ひじょうに基礎的なところで躓いてしまっております。 よろしくご教授お願いいたします。 地域名リスト 札幌市 中央区 東区 北区 白石区 函館市 小樽市 旭川市 室蘭市 青森市 青森市 弘前市 八戸市

    • ベストアンサー
    • XML
  • xml画像データを表示するphp

    xml画像データを表示するphp下記で構文エラー....解りません ご教授宜しくお願い致します。 IMAGE.XML <?xml version="1.0"?> <photos> <photo url="http://www.kahokanko.com/menu/1.jpg"/> <photo url="http://www.kahokanko.com/menu/13.jpg"/> <photo url="http://www.kahokanko.com/menu/8.jpg"/> </photos> IMAGE.PHP <?php $xml = simplexml_load_file($req) foreach($req->photos->photo as $value){ printf('<img src="%s"><br>', $value->photo->URL); }

    • 締切済み
    • 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でのXMLの表示について

    PHPでのXMLの表示について PHPで下記のようなXMLファイルから <タイトル>改行 <コメント>改行 <日付> <名前> というように取り出したいのですが 私の書いたソースでは下記のXMLファイル から名前(1)、コメント(1)、日付(1)、件名(1)しか 取り出せません。。 名前(2)、コメント(2)、日付(2)、件名(2)を取り出す にはどのように記述をしたら良いか教えて頂けない でしょうか。。 #私が書いたソース <?php $xml = simplexml_load_file('http://api.tabelog.com/Ver1/ReviewSearch/?Rcd=<RestruantCode>&Key=<APIKey>&SortOrder=update&PageNum=1'); $NickName = $xml->Item->NickName; $VisitDate = $xml->Item->VisitDate; $Title = $xml->Item->Title; $Comment = $xml->Item->Comment; echo "<p><b>".$Title."</b><br>".$Comment."<br>".$VisitDate." ".$NickName."</p"; ?> #XML(元は食べログのAPIより取得) <?xml version="1.0" encoding="utf-8" ?> - <ReviewInfo> <NumOfResult>11</NumOfResult> - <Item> <NickName>名前(1)</NickName> <VisitDate>日付(1)</VisitDate> <ReviewDate>'10/04/29</ReviewDate> <UseType>夜のみ</UseType> <Situations>友人・同僚と</Situations> <TotalScore>3.0</TotalScore> <TasteScore>3.0</TasteScore> <ServiceScore>3.0</ServiceScore> <MoodScore>3.0</MoodScore> <PriceDinner>¥8,000~¥9,999</PriceDinner> <PriceLunch /> <Title>タイトル(1)</Title> <Comment>コメント(1)</Comment> <PcSiteUrl>URL(1)</PcSiteUrl> <MobileSiteUrl>URL(1)</MobileSiteUrl> </Item> - <Item> <NickName>名前(2)</NickName> <VisitDate>日付(2)</VisitDate> <ReviewDate>'10/04/17</ReviewDate> <UseType>昼のみ</UseType> <Situations>デート</Situations> <TotalScore>4.0</TotalScore> <TasteScore>4.0</TasteScore> <ServiceScore>4.0</ServiceScore> <MoodScore>4.0</MoodScore> <PriceDinner /> <PriceLunch>¥3,000~¥3,999</PriceLunch> <Title>タイトル(2)</Title> <Comment>コメント(2)</Comment> <PcSiteUrl>URL(2)</PcSiteUrl> <MobileSiteUrl>URL(2)</MobileSiteUrl> </Item> </ReviewInfo>

    • ベストアンサー
    • PHP
  • XMLのURLをPHP表示したいのですが

    ご質問失礼いたします。 XMLをPHPで表示させたくて、下記のようにPHPファイルを作りました。 <?php $xmlfile = "xmlのURL"; $article=file_get_contents($xmlfile); echo "<table><tr><td>題名</td><td>リンク</td></tr>"; foreach($article->ItemLookupResponse->Items->Item as $data){ echo "<tr><td>"; echo $data[Title]; echo "</td><td>"; echo $data[ItemLinks->ItemLink asURL]; echo "</td></tr>"; } echo "</table>"; ?> echo $article;//で確認したXML(表示に必要な部分だけに省略させていただきました) <?xml version="1.0" ?> <ItemLookupResponse xmlns="http://www.~"> <Items> <Item> <Title>たいとる</Title> <ItemLinks> <ItemLink> <URL>http://www.~</URL> </ItemLink> </ItemLinks> </Item> </Items> </ItemLookupResponse> しかし、表示されず原因を特定することができません。 XMLだけを表示すると、 「This XML file does not appear to have any style information associated with it. The document tree is shown below.」 とは出ますが、情報はきちんと出ていると・・・思います。 PHPのファイルはページのソースを確認しても問題ないように見えたので、 表示の方法かXMLが違うのか、ご指摘いただければと思います。 すみません、知識が未熟な為、伝わりにくかったら申し訳ございませんが、 何卒お力をいただけたらと思います、宜しくお願い致します。

    • ベストアンサー
    • XML
  • phpを2つ書くと表示されない

    こちらのサイトを見てflickrの写真を取得することができました。 divタグで区切って2段にして上は猫の写真、下は犬の写真を表示させたいのですが犬の写真用のphpのコードを書くと1段目の猫の画像すら表示されなくなります。 一体なぜでしょうか。 <div id="cats"> <?php //flickrから写真を検索してimgタグを返す関数 function search_flickr($keyword,$limit){ //取得したAPIキーを設定 $api_key = '86f08c1dec4643d02154d65ed******'; //メソッドに写真検索を設定 $method = 'flickr.photos.search'; //検索キーワードをURLエンコードして設定 $text = urlencode($keyword); //人気の高い順に検索 $sort = "interestingness-desc"; //取得件数を設定 $per_page = $limit; //URLを生成 $url = 'https://api.flickr.com/services/rest/?'. 'method='.$method. '&api_key='.$api_key. '&text='.$text. '&sort='.$sort. '&per_page='.$per_page; //取得したXMLファイルをパースし、オブジェクトに代入 $data = simplexml_load_file($url) or die("XMLパースエラー"); //表示写真サイズをmサイズに設定 $size = "_m"; //変数初期化 $ret = ""; //取得できた写真の数だけループ処理 foreach($data->photos as $photos){ foreach($photos->photo as $photo){ $ret .= '<a href="http://www.flickr.com/photos/'.$photo['owner'].'/'.$photo['id'].'/">'; $ret .= '<img src="http://farm'.$photo['farm'].'.static.flickr.com/'.$photo['server'].'/'.$photo['id'].'_'.$photo['secret'].$size.'.jpg" alt="'.$photo['title'].'">'."\n"; $ret .= '</a>'; } } return $ret; } //検索ワード $keyword = "Britishmuseum"; //取得数 $limit = 10; //写真を検索して表示 echo search_flickr($keyword,$limit); ?> </div> <div id="dogs"> <?php //flickrから写真を検索してimgタグを返す関数 function search_flickr($keyword,$limit){ //取得したAPIキーを設定 $api_key = '86f08c1dec4643d02154d65ed59915c0'; //メソッドに写真検索を設定 $method = 'flickr.photos.search'; //検索キーワードをURLエンコードして設定 $text = urlencode($keyword); //人気の高い順に検索 $sort = "interestingness-desc"; //取得件数を設定 $per_page = $limit; //URLを生成 $url = 'https://api.flickr.com/services/rest/?'. 'method='.$method. '&api_key='.$api_key. '&text='.$text. '&sort='.$sort. '&per_page='.$per_page; //取得したXMLファイルをパースし、オブジェクトに代入 $data = simplexml_load_file($url) or die("XMLパースエラー"); //表示写真サイズをmサイズに設定 $size = "_m"; //変数初期化 $ret = ""; //取得できた写真の数だけループ処理 foreach($data->photos as $photos){ foreach($photos->photo as $photo){ $ret .= '<a href="http://www.flickr.com/photos/'.$photo['owner'].'/'.$photo['id'].'/">'; $ret .= '<img src="http://farm'.$photo['farm'].'.static.flickr.com/'.$photo['server'].'/'.$photo['id'].'_'.$photo['secret'].$size.'.jpg" alt="'.$photo['title'].'">'."\n"; $ret .= '</a>'; } } return $ret; } //検索ワード $keyword = "Britishmuseum"; //取得数 $limit = 10; //写真を検索して表示 echo search_flickr($keyword,$limit); ?> </div>

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

    Livedoor weather の下記のアドレスで取得する XML を解析したいのですが良い方法はないでしょうか。 XML ファイルの解析は http://www.jxpath.com/dom/readDOM.html を参考にしてできるようになりました。 しかし File オブジェクトでなくて下記の URL にアクセスして見れる XML はどうしたらよいのでしょうか。 http://weather.livedoor.com/forecast/webservice/rest/v1?city=113&day=tomorrow こういう XML を Java ではどうやって扱うのでしょうか?

    • ベストアンサー
    • Java
  • xmlを表示させるには?

    OS:XP_Pro,BROWER:IE7です 大学のサイトから古典を無料ダウンロードできるサービスがあって そこからダウンロードしたらa.xlmとフォルダaが落ちてきました aの中にはa.sgmlというファイルがあります 古典の本文はa.sgmlに記述されています さてこれをどのようにして表示させるのでしょうか? よろしくお願いします 参考までにファイルの内容を記述します a.xmlの一部 <?xml version="1.0" encoding="UTF-8"?> <TEI xmlns="http://www.****"> <teiHeader> <fileDesc> <titleStmt> <title type="uniform">*****</title> <title type="main">*****</title> <respStmt> <resp>*****</resp> <name>****</name> </respStmt> </titleStmt> <extent> <seg type="****">Text data</seg> <seg type="****">(1 file : ca. 4.72 megabytes)</seg> </extent> <publicationStmt> a.sgmlの一部 <TEXT> <FRONT> <TITLEPAGE> <DOCTITLE> <TITLEPART>*****</TITLEPART> <TITLEPART>********</TITLEPART> </DOCTITLE> </TITLEPAGE> </FRONT> <BODY> <DIV1 ID="***" TYPE="****"> <DIV2 ID="***" TYPE="****"> <HEAD>*****</HEAD> <DIV3 ID="***" TYPE="*****"> <P N="****">****</P>

専門家に質問してみよう