加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

我应该如何解析Perl中的大型XML文件?

发布时间:2020-12-15 23:30:05 所属栏目:大数据 来源:网络整理
导读:读取以下代码中的 XML数据是否会在内存中创建DOM树? my $xml = new XML::Simple;my $data = $xml-XMLin($blast_output,ForceArray = 1); 对于大型XML文件,我应该使用SAX解析器,处理程序等吗? 解决方法 我会对两者都说是. XML :: Simple库将在内存中创建整
读取以下代码中的 XML数据是否会在内存中创建DOM树?

my $xml = new XML::Simple;

my $data = $xml->XMLin($blast_output,ForceArray => 1);

对于大型XML文件,我应该使用SAX解析器,处理程序等吗?

解决方法

我会对两者都说是. XML :: Simple库将在内存中创建整个树,它是文件大小的一个大倍数.对于许多应用程序,如果你的XML超过100MB左右,那么在perl中完全加载到内存中是不可能的. SAX解析器是一种在读取文件和打开或关闭标记时获取“事件”或通知的方法.

根据您的使用模式,SAX或基于DOM的解析器可能更快:例如,如果您尝试处理大型文件中的几个节点或每个节点,SAX模式可能是最佳的.例如,读取大型RSS源并尝试解析其中的每个项目.

另一方面,如果您需要将文件的一部分与另一部分交叉引用,那么DOM解析器或通过XPath访问将更有意义 – 以SAX解析器所需的“由内向外”方式编写它将是笨拙而棘手.

我建议至少尝试一次SAX解析器,因为这样做的事件驱动思维是很好的练习.

我已经在XML :: SAX :: Machines中成功地在perl中设置了SAX解析 – 如果你想要多个过滤器和管道,它很容易设置.对于更简单的设置(即99%的时间),您只需要一个sax过滤器(查看XML :: Filter :: Base)并告诉XML :: SAX :: Machines只使用解析文件(或从文件句柄读取)你的过滤器. Here’s a thorough article.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读