-4

从早上开始,我一直在挠头来解决以下要求。我知道如何解析 xml,但无法找到解决方案来获取确切的块和标签。

示例代码:

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

谢谢你的帮助

4

1 回答 1

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');

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

瞧。

XML::Twig 还附带了一个名为 的工具xml_grep,它可以轻松提取您想要的内容:

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

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

于 2012-08-09T06:42:22.503 回答