如何通过perl获取xml代码块

时间:2012-08-09 04:33:21

标签: perl perl-module

从早上开始,我正在挠头解决以下要求。我知道如何解析xml但无法找到sollution以获得与标签一起的精确块。

示例代码:

<employee name="sample1">
 <interest name="cricket">
<function action= "bowling">
   <rating> average </rating>
</function>
 </interest>
 <interest name="football">
<function action="defender">
   <rating> good </rating>
</function>
 </interest>
</employee>

我只想从上面的xml文件中提取以下内容并将其写入另一个文本文件。

  <interest name="cricket">
     <function action= "bowling">
        <rating> average </rating>
     </function>
  </interest>

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

使用XML :: Twig:

#!/usr/bin/perl

use strict;
use warnings;
use XML::Twig;

XML::Twig->new( twig_handlers => { 'interest[@name="cricket"]' => sub { $_->print } },
              )
         ->parsefile( 'interest.xml');

一点解释:当满足触发条件的元素(在本例中为interest[@name="cricket"])满足时,将调用twig_handler。此时调用相关的子。在子$_中设置为当前元素,然后打印。对于更复杂的subs,传递了2个参数,twig本身(文档)和当前元素。

瞧。

使用XML :: Twig还​​有一个名为xml_grep的工具,可以很容易地提取你想要的东西:

xml_grep --nowrap 'interest[@name="cricket"]' interest.xml

--nowrap选项可防止将结果包装在包含元素中的默认行为。