在Twig中打印XML的内容

时间:2016-04-22 08:24:09

标签: xml perl xml-twig

我正在尝试在Perl中打印一些基本日志,但我遇到了一个非常简单的问题:我无法打印XML标记的内容。

my $twig=XML::Twig->new(pretty_print => "nice");
$twig->parse($xml);
my $root = $twig->root;

my @desc=$root->descendants_or_self('node');
my $nrofdesc=@desc;

my $sentence = $root->descendants('sentence')->print;
my $sentenceid = $root->{att}->{id};

if ($nrofdesc > $maxdescendants) {
  print "$sentence\t$nrofdesc\t$sentenceid\n";
}

我尝试了上面的代码,但收到了错误

  

如果没有包或对象引用,则无法调用方法“print”   file.pl第35行,第15行。

这一行:

my $sentence = $root->descendants('sentence')->print;

我也经常提出text,但我得到同样的错误。我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

这不是jQuery; - (你必须遍历后代列表。

另外,您无法使用print收集变量中的数据,而是使用print来...打印!请改用sprint

$sentence= join '', map { $_->sprint } $root->descendants('sentence');

如果你想要的是元素的文本,并且所有sentence元素的内容都是纯文本,你也可以使用$sentence= $root->findvalue( '//sentence')

此外,使用$root->att( 'id')$root->id,因为$root->{att}->{id}不是官方API的一部分,并且可能在将来发生变化。