2006年11月28日火曜日

[Perl] XML::MyXML

最近毎日アップデートされている XML::MyXML。value の取り出しが簡単なのがいい。PurePerl なので、コンパイル環境が無いレンタルサーバでも使える。
use XML::MyXML qw(xml_to_object);

my $xml = "Table10.008.50";

my $obj = xml_to_object($xml);
print "Price in Euros = " . $obj->path('price/eur')->value;

ベンチしてみると、libXMLには及ばないがDOMやSimpleより速い。
use strict;
use XML::DOM;
use XML::LibXML;
use XML::Simple;
use XML::MyXML qw(tidy_xml xml_to_object);
use Benchmark ':all';

my $str_xml = <<'END_OF_XML';







END_OF_XML

cmpthese(
timethese( 10000, {
'XML::DOM' => sub {
my $p = new XML::DOM::Parser( Sytle => 'Tree' );
my $tree = $p->parse( $str_xml );
},
'XML::LibXML'=> sub {
my $p = XML::LibXML->new();
my $doc = $p->parse_string( $str_xml );
},
'XML::Simple'=> sub {
my $p = new XML::Simple();
my $doc = $p->XMLin( $str_xml );
},
'XML::MyXML'=> sub {
my $doc = xml_to_object($str_xml);
},
})
);

Benchmark: timing 10000 iterations of XML::DOM, XML::LibXML, XML::MyXML, XML::Simple...
XML::DOM: 8 wallclock secs ( 7.34 usr + 0.27 sys = 7.61 CPU) @ 1314.06/s (n=10000)
XML::LibXML: 1 wallclock secs ( 0.60 usr + 0.02 sys = 0.62 CPU) @ 16129.03/s (n=10000)
XML::MyXML: 5 wallclock secs ( 2.58 usr + 0.53 sys = 3.11 CPU) @ 3215.43/s (n=10000)
XML::Simple: 10 wallclock secs ( 8.26 usr + 1.26 sys = 9.52 CPU) @ 1050.42/s (n=10000)

なかなかいい★

0 件のコメント: