XML::Simple
XMLパーサです。
XMLをPerlの多重ハッシュのようにしてくれます。
ほとんどの場合、XMLのパースにモジュールを使うよりも、正規表現で処理した方が簡単だと思います。
PerlのXMLパーサのモジュールは他にもあるが、XML::Simpleが簡単。
まず、use
use XML::Simple;
XMLinでハッシュパースする。
$parse=XMLin($xml);
$xmlはXML構造の文字列。
これだけで$parseにXMLをハッシュ化したようなのが代入されます。
<html>
<head>
<title>タイトル</title>
</head>
<body>
<span>文章1</span>
<span>文章2</span>
</body>
</html>
↑例えばこんな構造のXMLがあったとします。
これを
$parse=XMLin($xml);
のようにして$parseに処理済みデータが格納されているとします。
$parse->{'html'}
は、ハッシュのリファレンスで、
ループ処理したい場合は、
foreach(keys(%{$parse->{'html'}})){
処理;
}
こんな感じで、中にある<head>と<body>が取り出せる。
$parse->{'html'}->{'head'}
も内部にタグがあるので、ハッシュのリファレンスになっている。
print $parse->{'html'}->{'head'}->{'title'};
こんな感じで、<title>内のテキストである、「タイトル」が取得できる。
<body>内の<span>は2つあるが、配列で取り出せる。
foreach(@{$parse->{'html'}->{'body'}->{'span'}}){
print $_;
}
XML::Simple使うと、マルチバイト文字に勝手にutf8フラグがついちゃいます。
Encodeを使って、
utf8::encode($str);
のようにして、マルチバイト文字が含まれる可能性のある部分は、
出力前に全部フラグを落とさないとダメかもです。