アマゾネス
amazonのアレ、XMLを扱うモジュールを使って書き直してみようかと思ったものの、やはりこんな簡単な処理では本格的なパーサーを使うよりは正規表現を使ってお手軽に済ませてしまった方がよさそう。たとえば
use XML::DOM; my $parser = new XML::DOM::Parser; my $doc = $parser->parsefile('xml.xml'); my @condition = (); foreach my $x ($doc->getElementsByTagName('Condition')) { push @condition,$x->getFirstChild->getNodeValue; }
とすれば<Condition>〜</Condition>の「〜」の部分が取り出せるが、これは次のコードで同じ事が出来る。
my $data; open(FH,'xml.xml'); { local $/; $data = <FH>; } close FH; my (@condition) = $data =~ m#<Condition>(.*?)</Condition>#ig;
前者では三行必要なのに対し、後者だと一行で済む。短くても難解な物なら問題だけど、こんなにも単純な正規表現で処理出来るんだから、たぶんこっちの方が正解だろうと思う。サブルーチンとしてまとめればいいだけだろって話もある。
XMLパーサーを使う場合、LibXML+XPathという方法が一番速いらしいが、借りているところではXML::DOMしかインストールされていなかったため、それを使うしかなかった。インストールを依頼してもいいんだけど…。
でもLibXML+XPathを使うやり方がよく分からない。ちょっと調べてみたけどめぼしいのが出てこなかった。後学のためにパーサー使うやり方を覚えておいてもよさそうだけども、どっかにいい解説がないかな。