XMLパーサーの使い方がいまいちわからないので、いろいろ探していたら
TreePPというのを見つけた。
正規表現で無理やり引っこ抜こうかと思ったけど、使ってみるとこっちのほうがダンゼン楽だ。
TreePP仕様
http://search.cpan.org/~kawasaki/XML-TreePP-0.39/lib/XML/TreePP.pm
XML::TreePP/Pure Perl実装によるXMLファイル展開
http://www.kawa.net/works/perl/treepp/treepp.html
上のリンクはcpanだけど、うえのリンクから直でDL出来て、
インストールせずとも置くだけで使うことが出来てすばらしい。
使うには
use XML::TreePP;
とするのだけど、XMLはディレクトリ名なので、自由に変えられる。
使い方の詳細は下のリンクを見るといい。
でも、意外と詳しすぎてわからないなんて人もいるかもしれないので、
簡単に書いておく。
use XML::TreePP;
use Data::Dumper;
my $tpp=XML::TreePP->new();
my $hoge= $tree->{'タグ名'}->{'タグ名'};
こんなに簡単。
タグ名、と簡単に書いてしまったけど、
以下のようにダンプしてあげると、どう書けばいいかわかると思う
※英数だけならconvertはいらない。
my $text = Dumper( $tree );
Jcode::convert(\$text,"euc-jp");
print $text;
けっこう迷ったのが同じタグでn番目・・・とやりたい場合。
my $hoge= $tree->{'タグ名'}->{'タグ名'}->[0];
とか
my $hoge= $tree->{'タグ名'}->{'タグ名'}->[1]->{'タグ名'};
のように書く。
これも一度ダンプしてみるとわかりやすい。
全部取り出して、アトリビュートがナントカだったら・・・
とやりたい場合はwhileやforで全部取り出して、
アトリビュートがナントカのとき・・・
とやるしかないと思う。
for (0.. $#{ tree->{'タグ名'}->{'タグ名'} } ){
}
じつは、この処理でどうしてもエラーになってしまって困った。
原因は間に突然空のタグがあったから・・・
つまり↓の場合はエラーになるみたい。
$tree->{'タグ名'}->{'タグ名'}->[0]
$tree->{'タグ名'}->{'タグ名'}->[1]
$tree->{'タグ名'}->{'タグ名'}->[2] ← これがなかったりすると・・・
$tree->{'タグ名'}->{'タグ名'}->[3]
存在しないタグを指定するとエラーになるのかと思ったらそうでも無いみたい。
どちらにしても危険なので、evalで囲っておけばいいと思う。
- 関連記事
-