【问题标题】:How to display ancestors with XML::Twig?如何使用 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 的帮助

【问题讨论】:

    标签: perl perl-module xml-twig ancestor


    【解决方案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 找到了它。非常感谢!!!
    猜你喜欢
    • 1970-01-01
    • 2015-11-02
    • 2013-11-22
    • 2023-03-03
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多