perlで

XML解析
以下のXMLファイルから
http://live-e.naist.jp/data/getLatestDataAll/
の中から、全ての
属性値:latitude、 longitudeを取得するプログラムを作成したいのですが、perl初心者で困っています。
どなたかプログラムを作成していただけないでしょうか。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/07/23 02:41:59
  • 終了:2010/07/23 20:53:02

ベストアンサー

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492010/07/23 04:58:01

ポイント70pt

実行環境の指定が無いため汎用性の高いコマンドライン上で動くものを作成してみました。結果はcsv形式で標準出力にでてきます

動作確認はwindows上でのみ行っています。windows上で動かしたため文字コードはsjisを利用しています

Linuxなどで動かす場合は一行目のperlパスを適正なものに調整して、文字コードも必要に応じて調整してください

WEB出力が最終目的かもしれませんが、解析とは別問題となりますので別質問にしてくださいませ

(カンマで繋ぐのではなくHTMLタグを一緒に出力するようにして、httpヘッダを加えるだけですけどね。

 一度に両方に対応するのは大変なので、今回はコマンドライン出力のみとしています。

 質問の際には動作環境や最終出力形態も指定されると、双方ともに楽になりますので、以後よろしくです)

hoge.pl

#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
use Encode;
use XML::Simple;
my $readXML = XML::Simple -> new -> XMLin( get( 'http://live-e.naist.jp/data/getLatestDataAll/' ) );
my @data;
foreach my $key ( keys %{ $readXML->{ 'sensorGroup' } } ) {
    if ($key ne '') {
        print '"', encode( 'sjis', $key ), '"';
        print ',', $$readXML{ 'sensorGroup' }{ $key }{ 'latitude' };
        print ',', $$readXML{ 'sensorGroup' }{ $key }{ 'longitude' };
        print "\n";
    }
}

実行方法は下記のような具合

perl hoge.pl > hoge.csv

xml解析初心者の方に向けた。おまけです

上記のようなコードを書くためにはxmlの構造を調べなければならないので今回は下記のようなコードで事前調査しています

このように事前調査することでxmlの利用はかなり簡単になります。初心者で学習中の方はぜひご活用ください

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use LWP::Simple;
use XML::Simple;
my $readXML = XML::Simple -> new -> XMLin( get( 'http://live-e.naist.jp/data/getLatestDataAll/' ) );
print Dumper($readXML);
id:yoshi_3150

ありがとうございました!

よくわかりました。

勉強を続けれそうです。

また、つまづいたときは、

よろしくお願い致します。

2010/07/23 20:50:37

その他の回答(1件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492010/07/23 04:58:01ここでベストアンサー

ポイント70pt

実行環境の指定が無いため汎用性の高いコマンドライン上で動くものを作成してみました。結果はcsv形式で標準出力にでてきます

動作確認はwindows上でのみ行っています。windows上で動かしたため文字コードはsjisを利用しています

Linuxなどで動かす場合は一行目のperlパスを適正なものに調整して、文字コードも必要に応じて調整してください

WEB出力が最終目的かもしれませんが、解析とは別問題となりますので別質問にしてくださいませ

(カンマで繋ぐのではなくHTMLタグを一緒に出力するようにして、httpヘッダを加えるだけですけどね。

 一度に両方に対応するのは大変なので、今回はコマンドライン出力のみとしています。

 質問の際には動作環境や最終出力形態も指定されると、双方ともに楽になりますので、以後よろしくです)

hoge.pl

#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
use Encode;
use XML::Simple;
my $readXML = XML::Simple -> new -> XMLin( get( 'http://live-e.naist.jp/data/getLatestDataAll/' ) );
my @data;
foreach my $key ( keys %{ $readXML->{ 'sensorGroup' } } ) {
    if ($key ne '') {
        print '"', encode( 'sjis', $key ), '"';
        print ',', $$readXML{ 'sensorGroup' }{ $key }{ 'latitude' };
        print ',', $$readXML{ 'sensorGroup' }{ $key }{ 'longitude' };
        print "\n";
    }
}

実行方法は下記のような具合

perl hoge.pl > hoge.csv

xml解析初心者の方に向けた。おまけです

上記のようなコードを書くためにはxmlの構造を調べなければならないので今回は下記のようなコードで事前調査しています

このように事前調査することでxmlの利用はかなり簡単になります。初心者で学習中の方はぜひご活用ください

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use LWP::Simple;
use XML::Simple;
my $readXML = XML::Simple -> new -> XMLin( get( 'http://live-e.naist.jp/data/getLatestDataAll/' ) );
print Dumper($readXML);
id:yoshi_3150

ありがとうございました!

よくわかりました。

勉強を続けれそうです。

また、つまづいたときは、

よろしくお願い致します。

2010/07/23 20:50:37
id:yamaneroom No.2

yamaneroom回答回数1040ベストアンサー獲得回数612010/07/23 08:40:13

ポイント20pt

XML::Parserを使えばよい。

http://monpe.cliff.jp/computer/perl/perl_xml002.html

id:yoshi_3150

ありがとうございました。

xmlの解析モジュールにはいろいろあるんですね。

勉強になります。

2010/07/23 20:52:04

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません