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

我怎样才能加速XML :: Twig

发布时间:2020-12-15 23:54:36 所属栏目:百科 来源:网络整理
导读:我使用 XML::Twig 来解析一个非常大的XML文档.我想根据 change / change将其拆分为块.标签. 现在我有: my $xml = XML::Twig-new(twig_handlers = { 'change' = parseChange,});$xml-parsefile($LOGFILE);sub parseChange { my ($xml,$change) = @_; my $me
我使用 XML::Twig来解析一个非常大的XML文档.我想根据< change>< / change>将其拆分为块.标签.

现在我有:

my $xml = XML::Twig->new(twig_handlers => { 'change' => &;parseChange,});
$xml->parsefile($LOGFILE);

sub parseChange {

  my ($xml,$change) = @_;

  my $message = $change->first_child('message');
  my @lines   = $message->children_text('line');

  foreach (@lines) {
    if ($_ =~ /[^a-zA-Z0-9](?i)bug(?-i)[^a-zA-Z0-9]/) {
      print outputData "$_n";
    }
  }

  outputData->flush();
  $change->purge;
}

现在,当它从XML中提取该块时,它正在运行parseChange方法.它变得非常缓慢.我通过$/ =< / change>从文件中读取XML来测试它并编写一个函数来返回XML标记的内容,它的速度更快.

是否有我遗漏的东西或我使用XML :: Twig错误?我是Perl的新手.

编辑:以下是更改文件的示例更改.该文件由很多这些文件一个接一个地组成,它们之间不应该有任何东西:

<change>
<project>device_common</project>
<commit_hash>523e077fb8fe899680c33539155d935e0624e40a</commit_hash>
<tree_hash>598e7a1bd070f33b1f1f8c926047edde055094cf</tree_hash>      
<parent_hashes>71b1f9be815b72f925e66e866cb7afe9c5cd3239</parent_hashes>      
<author_name>Jean-Baptiste Queru</author_name>      
<author_e-mail>jbq@google.com</author_e-mail>      
<author_date>Fri Apr 22 08:32:04 2011 -0700</author_date>      
<commiter_name>Jean-Baptiste Queru</commiter_name>      
<commiter_email>jbq@google.com</commiter_email>      
<committer_date>Fri Apr 22 08:32:04 2011 -0700</committer_date>      
<subject>chmod the output scripts</subject>      
<message>         
    <line>Change-Id: Iae22c67066ba4160071aa2b30a5a1052b00a9d7f</line>      
</message>      
<target>         
    <line>generate-blob-scripts.sh</line>      
</target>   
</change>
目前,您的程序正在处理所有XML文档,包括您不感兴趣的更改元素之外的数据.

如果将构造函数中的twig_handlers参数更改为twig_roots,则将仅为感兴趣的元素构建树结构,其余的将被忽略.

my $xml = XML::Twig->new(twig_roots => { change => &;parseChange });

(编辑:李大同)

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

    推荐文章
      热点阅读