XMLを解析する方法とJavaでの扱い方

このQ&Aのポイント
  • Livedoor weatherのXMLを解析するための方法と、Javaでの扱い方について解説します。
  • xmlファイルの解析方法や、URLからのアクセスで取得したXMLの扱い方について説明します。
  • Livedoor weatherのAPIを使用して取得したXMLデータをJavaで効率的に解析する方法を紹介します。
回答を見る
  • ベストアンサー

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 ではどうやって扱うのでしょうか?

noname#64345
noname#64345
  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • Evreux
  • ベストアンサー率29% (225/774)
回答No.1

あまりJavaは詳しくないので、頭の悪い方法だと思いますが、Javaで外部コマンドを実行してそれをダウンロードしてからFileオブジェクトとして扱う方法があります。 Linux、UNIXであればwgetを使ってみてはどうでしょう?Windowsでも多分wgetを入れられるとは思います。

参考URL:
http://www.tohoho-web.com/java/other.htm#Exec
noname#64345
質問者

お礼

その方向で考えていたのですが、いろいろ調べていたらできました。 InputStream をつかって DocumentBuilder.parse(InputStream) でやりました。 ナニワともあれレス感謝です。

関連するQ&A

  • 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 利用目的:勉強の為

    • ベストアンサー
    • 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
  • XML DOM XMLパーサーについて理解していません

    XMLについてイマイチ理解していないので教えてください。PHPでXMLファイルを開いて何らかの処理をするとします。例えば <?php //ドキュメントオブジェクトの作成 $doc = new DOMDocument(); //XML 文書ファイルのパース(DOM ツリーの作成) $doc->load("docs/td101.xml") //要素"b"を取得する $bElement = $doc->getElementsByTagName("b")->item(0); //取得した要素"b"に属性"ad"を設定する $bElement->setAttribute("ad","Fukuoka"); //ドキュメントをシリアライズする $doc->save("docs/result101.xml"); ?> のようにXMLファイルに属性を追加するという処理を行うとします。この時、DOMはPHPによって生成されるんでしょうか?またXMLはXMLパーサーによって解析されると本で読んだのですが、この場合PHPがXMLパーサーの機能を持っているんでしょうか?それともブラウザにXMLパーサーの機能があり、ブラウザ側で処理をされているのでしょうか?意味がわからなくて申し訳ないですが、この辺りを理解していなくて・・・御願いいたします。

    • ベストアンサー
    • XML
  • DOMのXML宣言値の変更

    XMLファイルをXMLパーサを使ってDOMにDocumentクラス変換します。 その変換してできたオブジェクトを操作して、 XML宣言のencodingの値を変更することは可能でしょうか?

    • ベストアンサー
    • Java
  • 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
  • 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
  • ライブドアお天気webサービスから取得できない

    ライブドアのお天気ウェブサービスから、以下のコードで天気データを取得しようとしていますが、 取得できません。 何が間違っているのでしょうか? クロスドメインの問題?とかいろいろ調べてみましたが、解決に至っていません。 ちなみに、実行すると、alert("アラート");も表示されないため、$.getJSONの関数自体が通っていないみたいです。 ウェブサーバーは、quicca(クイッカ)という所をレンタルし、そこにソースを置いています。 $(document).ready( function() {    var weather = ""; // 天気    var temp = ""; // 最高気温    var wetherURL = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=130010';    $.getJSON(wetherURL, function(json){       alert("アラート");       weather = json.value.items[0].forecasts[0].telop;       temp = json.value.items[0].forecasts[0].temperature.max.celsius;       alert(weather);    }); });

  • XML文書はどんな処理をしていますか?

    最近、遅ればせながらも、XML, XSLT, SAX, DOMなどに関心を持っています。 私が感じているところでは、固定長などのテキストファイルの代わ りにXML、構成ファイルにXMLといった感じで、C/C++, Javaなどで 処理する対象としては使われていない気がします。規格はたくさん 出ていて、いろりろできる感じがするのですが、どうも使われてい るように思えない・・・XMLベースのシステムであるWebSvcも、パ イロットPJTばかりでビジネスとして立ち上がっていない。 皆さんのところでは、XMLって使ってらっしゃいますか?ここらへ んを勉強するのにどんなリソースを参照されていますか?お勧めは ありますか? 宜しくお願いします。

    • ベストアンサー
    • XML
  • XML::LibXMLのfindnodes()で、ワイルドカードを使いたい

    XML::LibXMLでXPathを使いたいのですが、 ワイルドカードの指定がうまくいきません。 要素名に*を当てはめたいのですが、、、、 例えば以下の通りです。 下記XMLのid="1-1"とid="1-2"を抜きだしたいのです。 できればXPathにて指定したいのですが、、、 教えてください。 my $dom = $parser->parse_file($xml_file_str) or die; $x = "//Test/TestText[@id="1-*"]/text()"; $c = $dom->findnodes($x); 解析対象XML <XML> <Test> <TestText id="1-1">テスト1</TestText> <TestText id="1-2">テスト2</TestText> <TestText id="2-1">テスト3</TestText> </Test> </XML>

    • ベストアンサー
    • Perl
  • タイの天気予報

    タイのバンコクの天気が下記2サイトで全く異なるのですがどういうことでしょうか? http://weather.jp.msn.com/tenday.aspx?wealocations=wc:THXX0002&q=%e3%82%bf%e3%82%a4+%e3%83%90%e3%83%b3%e3%82%b3%e3%82%af+forecast:tenday http://weather.livedoor.com/world/4/27.html

専門家に質問してみよう