如何使用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)
。我错过了什么?
答案 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