【问题标题】:Extract XML tags using Perl使用 Perl 提取 XML 标记
【发布时间】:2011-07-01 17:49:53
【问题描述】:

我需要一个 Perl 脚本来分隔 XMl 标记。例如:

<bgtres>
 <resume key='267298871' score='5'>
 <xpath path='xpath://resume'>
 <resume canonversion='2' dateversion='2' present='734060'>........... </resume></xpath></resume>
</bgtres>

在这个 XML 文件中,我需要将简历标签下的内容(在 xpath 内)分开,出现在 xpath 之后的简历标签应该单独从一组 CV 中提取。我需要在 Perl 脚本中执行此操作。

谁能给我一个提示或编码来完成这个过程。我需要 Perl 脚本来完成这个过程

提前致谢

【问题讨论】:

  • 这是 Perl,不是 PERL ;--)

标签: xml perl parsing


【解决方案1】:
  • 参见XML::Twig - perl 模块 用于处理大型 XML 文档 树模式。
  • XML::Simple - 简单的 API 维护 XML(尤其是配置文件)

喜欢

use strict;
use warnings;
use XML::Simple;
use Data::Dumper;

my $xml = q~<?xml version='1.0'?>
<bgtres>
 <resume key='267298871' score='5'>
  <xpath path='xpath://resume'>
   <resume canonversion='2' dateversion='2' present='734060'>
   </resume>
  </xpath>
 </resume>
</bgtres>~;

print $xml,$/;

my $data = XMLin($xml);

print Dumper( $data );

foreach my $test (keys %{$data->{resume}{xpath}{resume}}){
        print"$test : $data->{resume}{xpath}{resume}->{$test}\n";
}

输出:

<?xml version='1.0'?>
<bgtres>
 <resume key='267298871' score='5'>
  <xpath path='xpath://resume'>
   <resume canonversion='2' dateversion='2' present='734060'>
   </resume>
  </xpath>
 </resume>
</bgtres>
$VAR1 = {
          'resume' => {
                      'xpath' => {
                                 'resume' => {
                                             'dateversion' => '2',
                                             'canonversion' => '2',
                                             'present' => '734060'
                                           },
                                 'path' => 'xpath://resume'
                               },
                      'score' => '5',
                      'key' => '267298871'
                    }
        };
dateversion : 2
canonversion : 2
present : 734060

【讨论】:

    【解决方案2】:

    我还是 perl 的新手,我不是这方面的专家。也就是说,我最近不得不解析一个 XML 文件,最终我使用了XML::DOM。我看到的好处是,当我不得不在一个月后返回代码以添加更多功能时,代码仍然很容易阅读。这是一个打印canonversion的小sn-p

    use XML::DOM;
    # Create instance of XML Dom Parser
    my $parser = new XML::DOM::Parser;
    # Read XML Doc
    my $doc = $parser->parsefile ("$XMLFile");
    # Fetch all resume tags
    foreach my $resume ($doc->getElementsByTagName("resume")) {
        $canonversion = $resume->getAttributeNode("BuildName")->getValue;
        # Do something with it
        print $canonversion;
    }
    

    希望对您有所帮助。

    【讨论】:

    • XML::DOM 已经很老了,现在并不是真正推荐的处理 XML 的方法。 XML::LibXML 具有非常相似的接口,但速度更快、功能更强大且维护得更好。
    • @mirod 感谢您的建议,我刚刚修改了我的旧脚本以使用 libxml 而不是 xml-dom,并且我看到速度有了显着提高...
    【解决方案3】:

    您需要使用XML Parser in Perl

    【讨论】:

      猜你喜欢
      • 2013-05-11
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 2012-12-12
      相关资源
      最近更新 更多