Perl:如何在没有根节点的情况下处理XML对象流
发布时间:2020-12-15 23:22:26 所属栏目:大数据 来源:网络整理
导读:我需要用Perl解析一个巨大的文件. (所以我将使用流解析器…) 该文件包含多个 XML文档(对象),但没有根节点.这会导致XML解析器在第一个Object之后中止,就像它应该的那样. 答案可能是修复假根节点之前/之后. FAKE_ROOT_TAGOriginal Stream/FAKE_ROOT_TAG 由于文
我需要用Perl解析一个巨大的文件. (所以我将使用流解析器…)
该文件包含多个 XML文档(对象),但没有根节点.这会导致XML解析器在第一个Object之后中止,就像它应该的那样. 答案可能是修复假根节点之前/之后. <FAKE_ROOT_TAG>Original Stream</FAKE_ROOT_TAG> 由于文件很大(> 1GByte),我不想复制/重写它,而是宁愿使用透明(对于XML Parser)“合并”或“合并”多个流的类/模块. stream1 : <FAKE_ROOT_TAG> stream2 : Original Stream from file > merged stream stream3 : </FAKE_ROOT_TAG> / 你能指点我这个问题的模块或示例代码吗? 解决方法
这是从
PerlMonks开始的一个技巧:
#!/usr/bin/perl use strict; use warnings; use XML::Parser; use XML::LibXML; my $doc_file= shift @ARGV; my $xml=qq{ <!DOCTYPE doc [<!ENTITY real_doc SYSTEM "$doc_file">] > <doc> &real_doc; </doc> }; { print "XML::Parser:n"; my $t= XML::Parser->new( Style => 'Stream')->parse( $xml); } { print "XML::LibXML:n"; my $parser = XML::LibXML->new(); my $doc = $parser->parse_string($xml); print $doc->toString; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |