Perl:从XML :: Twig中提取元素

时间:2015-03-04 23:08:47

标签: xml perl

如何使用XML :: Twig从XML文档中提取单个元素?

XML代码:

<report>
    <reportheader>
        <month>February 2015</month>
    </reportheader>
</report>

我尝试了什么

XML::Twig->new(
    twig_handlers => {
        '/report/reportheader/month' => sub {
            printf qq|%s\n|, $_;
        },
    },  
)->parsefile($ARGV[0]);

但这只是输出XML::Twig::Elt=HASH(0x343af70)。我错过了什么?

2 个答案:

答案 0 :(得分:3)

这是因为在匿名小组中,$_是元素对象。如果要打印元素的文本,请使用:

printf qq|%s\n|, $_->text_only;

产量:

February 2015

或者如果您想要打印整个元素,请改为使用:

printf qq|%s\n|, $_->outer_xml;

产量:

<month>February 2015</month>

你可以查看文档,它们很清楚。

答案 1 :(得分:2)

尽管使用XML::Twig的回调系统很有诱惑力,但简单地将整个XML数据解析为XML :: Twig&#39;数据结构并使用findnodes

访问其内容

这是一个打印与XPath表达式/report/reportheader/month匹配的所有元素的文本内容的示例。

use strict;
use warnings;
use 5.010;     # For `say`

use XML::Twig;

my $twig = XML::Twig->new;
$twig->parsefile(shift @ARGV);

for my $report_month ( $twig->findnodes('/report/reportheader/month') ) {
  say $report_month->trimmed_text;
}

<强>输出

February 2015