perl解析XML的性能比较

来源:互联网 时间:1970-01-01


perl XML模块

perl解析XML实现方式有很多模块。下面总结一些。


XML::Simple用于读写 XML 的普通 API,最好与 XML 格式的配置文件一起使用XML::LibXMLgnome libxml2 库的 Perl 接口,用于高性能的 DOM 处理XML::Parser用于 James Clark 的 XML 语法分析器 expat 的Perl 接口XML::XPathXPath 规范的完整实现XML::DOMXML::Parser 的 Perl 扩展,构建面向对象的数据结构并具有遵从 DOM 级别 1 的接口, 作为 libxml-enno 的一部分分发XML::Grove使用 Perl 散列树对已分析的 XML、HTML 或 SGML 实例组成的信息集进行简单访问XML::TwigXML 文档的树型接口,允许对超大型文档一段段地处理libxml-perlPerl 模块、脚本和文档的集合,用于在 Perl 中使用 XML, libxml-perl 软件与 XML::Parser、PerlSAX、XML::DOM、XML::Grove 等一起工作XML::Schematron基于 XSLT 的 XML 验证模块Orchard用于 XML 和 XML 表示的数据的事件流和树型视图的轻量级 APIXerces Perl“Apache XML 项目”中的 Xerces XML 语法分析器的 Perl 接口REX对有常规表达式的 XML 文档进行初步分析PYX至 PYX 生成器的 XML
模块说明

性能比较

CPU: Intel(R) Xeon(R) CPU E5-2603 0 @ 1.80GHz
MEM: 2G
系统: Centos 6.3
测试集: 有10万行的xml或者json,每个xml/json的大小在2k-3k.
perl解析速度和python,c++做了对比.

Perl v5.10.1XML::Simple10w 3k-XML200050Perl v5.10.1XML::LibXML 10w 3k-XML571754Perl v5.10.1JSON10w 3k-JSON764130Python 2.6.6xml.dom10w 3k-XML632158Python 2.6.6json10w 3k-JSON415240C++ jsoncppjsoncpp10w 3k-JSON293448
环境模块数据耗时(秒)速度(个/秒)

XML::LibXML编程示例

可见使用XML::LibXML将获得不错的解析性能,实质上在底层它使用的是libxml2.

#!/usr/bin/perluse XML::LibXML;sub parse_xml() { debug_print( ( caller(0) )[3] . "> /n" ) if ( $option{d} ); my $doc = undef; my $text_ref = undef; # catch xml exception eval { $doc = XML::LibXML->load_xml( string => $_ ); 1; } or do { my $err = [email protected]; debug_print( ( caller(0) )[3] . "> $err/n" ); }; if ($doc) { #e.g. node "meta" foreach my $node ( $doc->findnodes('/meta') ) { foreach my $child ( $node->childNodes ) { my $data = $child->toString; debug_print( ( caller(0) )[3] . "> $data/n" ); } } }}




相关阅读:
Top