PHP4でXMLを取得する方法

このQ&Aのポイント
  • PHP4でXMLを取得する方法について説明します。
  • レンタルサーバーがPHP4のため、PearのXML_Unserializerを使用しています。
  • コードの一部でコロンがある場合の取得方法についても解説します。
回答を見る
  • ベストアンサー

PHP4でXMLを取得する方法

XMLをPHPにて参照したいのですが、 レンタルサーバーがPHP4の為、PearのXML_Unserializerを使用しています。 通常問題なく使用できていたのですが、 http://weather.livedoor.com/forecast/rss/index.xml から取得してみようとした所、<ldWeather:lwws id="*" /> の箇所がどうしても取得出来ません。 print_rにて確認したところ、[ldWeather:lwws]となっているのですが、コロンがある場合はどのように取得したらいいのでしょうか? 以下がコードになります require_once("Unserializer.php"); $add = "http://weather.livedoor.com/forecast/rss/index.xml"; $xmldoc = join("",file($add)); $opt = array ('complexType' => 'object','parseAttributes' => 'true','attribuesArray' => '_attributes'); $xml = new XML_Unserializer($opt); $xml -> unserialize($xmldoc, false); $xml = $xml->getUnserializedData(); mb_convert_encoding($xml, "SJIS","UTF-8"); print_r($xml->channel->item[1]->ldWeather:lwws);←ここが問題箇所 PHPを始めたばかりで説明に不十分な箇所があるかも知れませんが、よろしくお願い致します。 PHPバージョン:PHP Version 4.4.6 XML取得先:Livedoor Weather Web Service 利用目的:勉強の為

  • cd6_s
  • お礼率100% (2/2)
  • PHP
  • 回答数1
  • ありがとう数1

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

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

当該クラスを使いこなしているわけではありませんが、アンシリアライズした結果を配列で返す(既に返している?)ようにすれば良いと思います。 例えば $xml["channel"]["item"][1]["ldWeather:lwws"] で取得出来るのではないでしょうか。 変数名は英数字、アンダーライン等で、ldWeather:lwwsではパースエラーになると言う事でしょう。 XML_Unserializer Optionsを見てみると、デフォルトではcomplexTypeはarrayとの事ですが。 http://peardoc.xole.net/package.xml.xml-serializer.xml-unserializer.options.html

cd6_s
質問者

お礼

早速のご回答ありがとうございます。 どこかのサイトで参考にさせて頂いたコードの為、そのまま使用していました。 $opt = array ('complexType' => 'object','parseAttributes' => 'true','attribuesArray' => '_attributes'); ご指摘通りデフォルトのcomplexTypeはarrayであるのにわざわざobjectにしてたわけで・・・ 的外れの事ばかり調べてて、何時間も悩んでたのにあっさりクリア出来てしまいました。 大変ありがとうございました。

関連するQ&A

  • 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
  • PHPでRSSから要素を取得する方法について

    PHPでRSSから要素を取得する方法について 下記のrss情報から「lddata:syousai」にあるA,B,Cの各""内の情報をphpで変数に 格納しようと思っていますがどうしてもうまく行きません。 このような形式の場合、どのようにして取得したら良いのか お知恵を貸していただけないでしょうか。 PHPを勉強し始めたばかりなので恥ずかしい質問内容になっているかも知れませんが 何卒よろしくお願いいたします。 ▼XML 詳細 ・rssの場所 http://test.com/forecast/rss/test.xml ・rssの内容 <?xml version="1.0" encoding="UTF-8" ?> - <rss version="2.0" xmlns:lddata="http://test.com/ns/rss/2.0"> - <channel> <title>test</title> <link>http://test.com</link> - <item> <title>情報タイトル</title> <link>http://test.com/jyoho/2010-05-15-18-24.html?r=?rss</link> <lddata:syousai A="東京都" B="9" C="日付データ" />   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ↑変数に格納したい場所 </item> </channel> </rss>

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

    現在、レッツPHPさんの新着ブロガーを設置しようと試みています。 -------------------- rss/new/index.html /PEAR.php /rssup.php /XML/Parser.php /XML/RSS.php ------------------------ 上記のようなファイル構造で、index.html内に<?php include("rssup.php"); ?>を記述しているのですが、何も起きません。 ※rssup.phpは、正常に動いていてRSS情報の取得は出来ています。 設置方法通りに<?php include("rssup.php"); ?>を記述するだけでは、駄目なのですか? どなたかご教授いただけないでしょうか?

    • ベストアンサー
    • PHP
  • php rss取得方法

    こんにちは、rss取得方法を勉強中なのですが 下記phpでrssを取得しているのですが、$xml->entry[$i]['item']->titleなどで うまく表示されません。(外部phpからxoopsのpicoというモジュールのrssを取得しようとしています。) phpコード $rssurl = "url"; $xml = simplexml_load_file($rssurl); $num_of_data = 4; $outdata = ""; for ($i=0; $i<$num_of_data; $i++){ $outdata .= "<li>"; $outdata .= "<a href=\""; $outdata .= $xml->entry[$i]->link[href]; $outdata .= "\">"; $outdata .= $xml->entry[$i]['item']->title; $outdata .= "</a><br />\n"; $outdata .= "</li>"; } xmlの中身 SimpleXMLElement Object ( [@attributes] => Array ( [version] => 2.0 ) [channel] => SimpleXMLElement Object ( [title] => XOOPS Cube Site - pico [link] => http://localhost/xoops/modules/pico/ [description] => SimpleXMLElement Object ( ) [lastBuildDate] => Thu, 13 Dec 2012 02:52:29 +0100 [docs] => http://backend.userland.com/rss/ [generator] => XOOPS - pico [category] => TOP [webMaster] => admin@hotmail.co.jp [language] => ja [item] => Array ( [0] => SimpleXMLElement Object ( [title] => コンテンツ1 [link] => http://localhost/xoops/modules/pico/index.php/index.html [description] => 正式名称:NARUTO -ナルト概要:体内に九尾の妖狐を封印された落ちこぼれ忍者・うずまきナルトが、里一番の忍である火影を目指し、数々の試練を乗り越え成長していく物語。仲間との友... [guid] => http://localhost/xoops/modules/pico/index.php/index.html [pubDate] => Thu, 13 Dec 2012 02:52:29 +0100 [category] => アニメタイトル ) [1] => SimpleXMLElement Object ( [title] => ee [link] => http://localhost/xoops/modules/pico/index.php/content0003.html [description] => e [guid] => http://localhost/xoops/modules/pico/index.php/content0003.html [pubDate] => Thu, 13 Dec 2012 02:03:51 +0100 [category] => アニメタイトル ) [2] => SimpleXMLElement Object ( [title] => コンテンツ6 [link] => http://localhost/xoops/modules/pico/index.php/content0002.html [description] => コンテンツ2 [guid] => http://localhost/xoops/modules/pico/index.php/content0002.html [pubDate] => Thu, 13 Dec 2012 01:53:17 +0100 [category] => アニメタイトル ) ) ) )

    • 締切済み
    • PHP
  • XML DOMについて

    JavaScriptでDOMを使用して、xmlhttp.sendで指定のPHPファイルに送信しましたが、 PHP側で値を取得できません。 (PHP Ver.5.3.0) 以下、JavaScript var UserID="abc"; var Password="abc"; var xmlDoc = new ActiveXObject("Microsoft.XMLDom"); xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml","version=\"1.0\"")); var root = xmlDoc.createElement("xDoc"); xmlDoc.documentElement=root; var node_Item = xmlDoc.createElement("Command"); root.appendChild(node_Item); var node_UserID = xmlDoc.createElement("UserID"); node_UserID.appendChild(xmlDoc.createTextNode(UserID)), node_Item.appendChild(node_UserID); var node_Password = xmlDoc.createElement("Password"); node_Password.appendChild(xmlDoc.createTextNode(MDString(Password))), node_Item.appendChild(node_Password); var node_Sufix = xmlDoc.createElement("Sufix"); node_Sufix.appendChild(xmlDoc.createTextNode(Sufix)), node_Item.appendChild(node_Sufix); var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("post",topURL("main/Log.php"),false); xmlhttp.send(xmlDoc); 以下、Log.php <?php session_start(); $DEBUG_MODE=false; $xmlLogQ=$_SERVER['DOCUMENT_ROOT']."/test/temp/Request.xml"; $xml = new DOMDocument(); $xml->async=false; if (!$DEBUG_MODE) { if ($XML_LOG) { $xml->save($xmlLogQ); } } else { if ($XML_LOG) { $xml->load($xmlLogQ); } } $doc=$xml->documentElement; if ($xml->parseError.errorCode==0) { $xml = $node=$doc->selectSingleNode("Command/UserID"); if (!($node==null)) { $UserID=$node->text; $node=null; } $node=$doc->selectSingleNode("Command/Sufix"); if (!($node==null)) { $Sufix=$node->text; $node=null; } $node=$doc->selectSingleNode("Command/Password"); if (!($node==null)) { $Password=$node->text; $node=null; } } ?> 保存したXML上、<?xml version="1.0"?>以降書き込みできてません。 どの部分がおかしいか不明の為、申し訳ないですがご教授お願いします。

    • ベストアンサー
    • PHP
  • phpからxmlへの文字化け

    PHPについての質問です。PHPのバージョンは5です。 FLASH8で作ったスクリプトからPHPに変数を送り、その変数をPHPからXMLに送っています。 しかしPHPからXMLに送ると日本語がちゃんと表示されません。何かPHPの方でしないとまずいのですか? <FLASH> System.useCodepage = true; SendData = new LoadVars(); //送りたいデータを箱に詰める this.btn_mc.onRelease = function() { _root.SendData.pro1 = nam; _root.SendData.pro2 = sbj; _root.SendData.pro3 = mail; _root.SendData.pro4 = product; //データ(中身)を詰めた箱をgetFlash.phpに送信 _root.SendData.sendAndLoad("http://localhost/php/xml_php/xml12.php", _root.SendData); }; <PHP> <?php /*変数を入れる*/ $name = $_POST["pro1"]; $sbj = $_POST["pro2"]; $add = $_POST["pro3"]; $msg = $_POST["pro4"]; /*時間を取得する*/ $stamp = time(); $date = date('Y,m/d(D)', $stamp); /*xmlに追加*/ $xml_path = "test1.xml"; $xml = file_get_contents( $xml_path ); $replace_key = "<article>"; $add_xml = $replace_key."\n<entry name='$name' dat='$date' tit='$sbj' contents='$msg'/>\n"; $result = str_replace($replace_key,$add_xml,$xml); file_put_contents( $xml_path , $result ); ?> <xml> <?xml version="1.0" encoding="utf-8"?> <article> <entry name="ha" dat="2008,03/10(Mon)" tit="test" contents="hogehoge"/> </article> となっています。

    • 締切済み
    • PHP
  • 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
  • SimpleXML関数で取得したXML要素を逆順にしたい

    SimpleXML関数で取得したXML要素を逆順にしたい お世話になります。 phpのsimplexml関数で取得したXML要素を 逆順にして表示させるにはどうしたらよいでしょうか? 通常、RSSなどを読み込み表示させた場合、新しいものから並ぶと思いますが、 これを逆順で古いほうから並ばせたいです。 rsortやarray_reverseを使ってみましたが、うまくいきませんでした。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 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

専門家に質問してみよう