Perlリファレンス

正規表現でXMLを処理する







正規表現でXMLを処理する


PerlでXMLを処理するための、XML::SimpleなどのXMLパーサがありますが、
ほとんどの場合、モジュールを使わずに正規表現を使って処理した方が簡単だと思います。

正規表現で、
「.*?」
のように、量指定子の後ろに「?」をつけると、最短マッチとなります。
同じタグが複数出現することを考えると、最短マッチさせる必要が出てくると思います。

例1
($value)=$xml=~/<Element>(.*?)<\/Element>/s;
こんな感じにすると、
同じ名前の要素がXML上に複数出現する場合でも、最短マッチで一つのタグ内が抽出できます。
sオプションは、XMLが改行を含んでいる場合のため。
ただし、
<Element><Element><\/Element><\/Element>
このように、要素内に同じ名前の要素が出現する可能性がある場合は、正規表現での抽出は難しくなると思います。

例2
while($xml=~/<Element>(.*?)<\/Element>/gs){
  value=$1;
}
同じ名前の要素が並んでいる場合のループ処理はこんな感じでできます。
gオプションで繰り返しマッチ。
XML::Simpleを使うと、ループ処理の際に、同じ要素が並んでいる場合と並んでいない場合の両方を考慮した作りにしないといけないが、
正規表現なら簡単。






[編集] [新規] [削除] [バックアップ] [アップロード] [ログイン] [管理]
whwiki 1.3