我应该如何解析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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |