XML解析の深淵――XML::Simpleの上をゆけ!1分ショートレビュー

ある特定の状況ではXML::Simpleは機能しない。本稿では、ツリー解析とイベント駆動型解析という、Perlを使った2つの高度なXML解析方法を紹介する。

» 2007年03月27日 13時31分 公開
[田中雅晴,ITmedia]

ここで紹介する記事は、developerWorksのPerl開発者のためのXML、第2回:Perlを使用した高度なXML解析手法です。


 本シリーズの第1回で「多くのケースで必要なすべてのものが揃う魔法のツール」として紹介されたXML::Simple(関連記事参照)別記事においてはてなの伊藤直也氏もお勧めしているように、PerlアプリケーションでXMLツールと言えば、XML::Simpleを挙げることに異論がある方はそう多くないだろう。

 万能に見えるXML::Simpleだが、場合によっては意図したように動作しないケースも存在する。例えば、メモリ内に作成されたXML文書表現からの複雑な方法での検索や、XML文書がメモリ内に収まらなかった場合、XML文書の長さが不明なストリームの場合などだ。本稿では、そのようなケースでのXML解析方法として、ツリー解析とイベント駆動型パーサを紹介するものである。

 本稿ではまずXML文書をメモリ内でオブジェクトのツリーに変換する方法を解説。XML文書をDOMツリーに解析できる最も優れたモジュールとして、XML::LibXMLを挙げている。極めて複雑なXML文書の場合には、XML::LibXMLを使用した方が、getElementsByTagNameのようなメソッドを使用できるためだ。このXML::LibXMLを用い、本シリーズ第1回でも使用したペットショップでのデータ処理を例にツリー解析の方法を説明している。

 次に本稿が説明するのは、SAX (Simple API for XML)によるイベント駆動型の解析の方法である。この方法に使用するモジュールには、安定性にも処理速度にも優れているとしてXML::SAX::ExpatXSが推奨されている。ここでも新しいペットショップの例を使用して、イベント駆動型によるXML解析方法を紹介している。

 さらに、ハンドラでありながら肩書きを変えてパーサの役割を引き受け、イベントを次のハンドラに渡すことで、あらゆる標準SAXイベントを処理できるモジュールとしてXML::SAX:: Baseを紹介し、詳細を解説することでそのメリットを述べている。

 本稿は、手軽なXMLとPerlソリューションを必要とするPerlプログラマー向けであるとともに、まったく別のプログラミングスタイルにも役立つ極めて豊富な機能を持っているツールとしてのSAXの手法が詳細に解説されており、多くのプログラマーが参照する価値のある内容である。早速CPANでモジュールをインストールし、実際に試してみてほしい。


# perl -MCPAN -e shell
cpan> install XML::LibXML XML::SAX::Base XML::SAX::ExpatXS XML::SAX::Writer

ここで紹介した記事は、developerWorksのPerl開発者のためのXML、第2回:Perlを使用した高度なXML解析手法です。


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ