使用Perl提取XML标记

时间:2011-02-22 04:54:52

标签: xml perl parsing

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

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

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

任何人都可以给我一个提示或编码来完成这个过程。我需要Perl脚本来执行此过程

先谢谢

3 个答案:

答案 0 :(得分:5)

  • 请参阅XML::Twig - perl模块 用于处理巨大的XML文档 树模式。
  • XML::Simple - 简易API 维护XML(esp配置文件)

喜欢

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

答案 1 :(得分:3)

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

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;
}

希望有所帮助。

答案 2 :(得分:-1)

您需要使用XML Parser in Perl