2012-06-15 1 views
2

Я не знаю, как отобразить ancestors_or_self одного Элемента.Как отображать предков с XML :: Twig?

Вот сообщение об ошибке я получаю при использовании метода ancestors_or_self(): Невозможно вызвать метод «печать» без упаковки или объекта ссылки на ххом

#!/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

Извините, что не был на моем компьютере в течение 1 дня. Я пробую все ваши решения. Вернусь к вам в следующие часы – 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