如何使用 XML::Twig 显示祖先?

Posted

技术标签:

【中文标题】如何使用 XML::Twig 显示祖先?【英文标题】:How to display ancestors with XML::Twig? 【发布时间】:2012-06-15 10:34:31 【问题描述】:

我不知道如何显示一个元素的祖先或自我。

这是我在使用方法祖先_or_self() 时收到的错误消息: 如果没有 xxxx 处的包或对象引用,则无法调用方法“print”

#!/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 的帮助

【问题讨论】:

【参考方案1】:

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;

【讨论】:

抱歉,我的电脑已经离开了 1 天。我正在尝试你所有的解决方案。将在接下来的几个小时内回复您 您使用path 的方法有效。我将在 1 小时内发布完整的 cmets 你的解决方案是有效的:print $v->path . "/"; $v->print; THANKS !! 实际上父/祖先有一个id<papa id="Larry Page"> </papa>。我必须得到以下输出<papa id="Larry Page"><son> toto </son> </papa>。有什么帮助吗?【参考方案2】:

那是因为ancestors_or_self返回一个列表,不能调用列表的方法。改用这个:

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

【讨论】:

谢谢。不幸的是,该命令返回了完整的 XML 文件,而不仅仅是元素 $v 的整个路径 好吧,我已经回答了你的直接问题,只是修正了语法。如果你真的想显示你的元素的路径,也许$v->path() 应该更合适? $v->path() 不显示任何内容。 ? say $_->tag for $v->ancestors_or_self;怎么样 print $v->path . "/"; $v->print; 是解决方案似乎 Dre 和 @raina77ow 找到了它。非常感谢!!!

以上是关于如何使用 XML::Twig 显示祖先?的主要内容,如果未能解决你的问题,请参考以下文章

仅选择第一个元素 - 条件使用 XML::Twig

使用 Git,我如何显示所有共享一个共同祖先的提交树?

如何从祖先覆盖嵌套 Material UI 组件的样式?

如何在 Xcode 11 故事板中查看祖先和后代的约束?

如何按祖先删除整个子实体?

如何在不使用祖先或自我的情况下构建祖先树:: *