2012-06-15 38 views
2

我不知道如何显示一个元素的ancestors_or_self。如何使用XML :: Twig显示祖先?

以下是错误信息使用方法ancestors_or_self()时,我得到: 不能在XXXX上调用方法“打印”没有包装或对象引用

#!/usr/bin/perl -w 
use warnings; 
use XML::Twig; 

my $t= XML::Twig->new; 
my $v= XML::Twig::Elt->new; 

$v= $t->first_elt('[@id]'); 
$v->print; 
print ("\n\n"); 
$v->ancestors_or_self->print; 

感谢您的帮助Perl XML :: Twig

回答

2

ancestors_or_self返回一个列表 - 假设你想要的路径元素,你也想->path->print。而作为->path回报的路径,你将不得不做这样的事情:

#!/usr/bin/perl -w 
use warnings; 
use XML::Twig; 

my $t= XML::Twig->new; 
my $v= XML::Twig::Elt->new; 

$v= $t->first_elt('[@id]'); 
print $v->path . "\n"; 
print ("\n\n"); 
print $_->path . "\n" foreach $v->ancestors_or_self; 
+0

对不起,我的电脑一天。我正在尝试所有的解决方案。在接下来的几小时内会回复你 – laurentngu

+0

你的'path'方法正在工作。我将在1小时内发布完整评论 – laurentngu

+1

您的解决方案就是我需要的解决方案。有用 !!!谢谢 – laurentngu

2

这是因为ancestors_or_self返回一个列表,并且您不能调用列表方法。而不是使用这样的:

$_->print for $v->ancestors_or_self; 
+0

感谢。不幸的是,命令返回** **完整的XML文件**,而不是我的元素的整个路径$ v – laurentngu

+0

嗯,我已经回答了您的直接问题,只是修复了语法。如果你真的想显示你的元素的路径,也许'$ v-> path()'应该更适合? – raina77ow

+0

'$ v-> path()'不显示任何内容。 ? – laurentngu