从早上开始,我正在挠头解决以下要求。我知道如何解析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>
感谢您的帮助
答案 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
选项可防止将结果包装在包含元素中的默认行为。