使用 XML::Twig 处理嵌套元素

发布于 2024-12-02 02:46:09 字数 817 浏览 1 评论 0原文

<cov>
    <item>
        <valo></valo>
        <valt></valt>
        <valtr></valtr>
    </item>             
    <item>
        <valo></valo>
        <valt></valt>
        <valtr></valtr>
    </item>             
    <item>
        <valo></valo>
        <valt></valt>
        <valtr></valtr>
    </item>             
</cov>

我正在尝试使用 twig 循环遍历每个项目的 valo 和 valtr - 我该怎么做?

到目前为止我已经有了这个,但是在子例程中如何指定正确的节点“valo”?

my $t = XML::Twig->new(twig_handlers => {'cov/item' => \&item });
my $url;
$t->parse($fileContent);

sub item {
    my ($t, $item) = @_;
    print $item->text . "\n";
}
<cov>
    <item>
        <valo></valo>
        <valt></valt>
        <valtr></valtr>
    </item>             
    <item>
        <valo></valo>
        <valt></valt>
        <valtr></valtr>
    </item>             
    <item>
        <valo></valo>
        <valt></valt>
        <valtr></valtr>
    </item>             
</cov>

I'm trying to use twig to loop through valo and valtr for each item - how can I do this?

I have this so far, but inside the subroutine how can I then specify the right node "valo"?

my $t = XML::Twig->new(twig_handlers => {'cov/item' => \&item });
my $url;
$t->parse($fileContent);

sub item {
    my ($t, $item) = @_;
    print $item->text . "\n";
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

喵星人汪星人 2024-12-09 02:46:09

下面的处理程序展示了一种检查 cov/item 节点子节点的方法:

sub item {
    my ($t, $item) = @_;

    my @kids = $item->children;
    for my $kid ( @kids ) {
        warn "valo is:  " . $kid->text if $kid->name eq q{valo};
        warn "valtr is: " . $kid->text if $kid->name eq q{valtr};
    }
}

另一种方法是使用 findnodes( ) 和 Twig 的类似 XPath 的语法来定位元素:

my $t = XML::Twig->new->parse( $fileContent );
for my $node ( $t->findnodes( '//valo' ) ) {
    warn "valo is: " . $node->text;
}

... 或者对于完整的 XPath 语法,请使用 XML::Twig::XPath 代替:

my $t = XML::Twig::XPath->new->parse( $fileContent );
for my $node ( $t->findnodes( '//valo | //valtr' ) ) {
    warn "valo is:   " . $node->text if $node->name eq q{valo};
    warn "valtr is:  " . $node->text if $node->name eq q{valtr};
}

请参阅 XML::Twig docs 了解此处使用的方法的详细信息。

Here's a handler that shows a way to inspect the children of the cov/item nodes:

sub item {
    my ($t, $item) = @_;

    my @kids = $item->children;
    for my $kid ( @kids ) {
        warn "valo is:  " . $kid->text if $kid->name eq q{valo};
        warn "valtr is: " . $kid->text if $kid->name eq q{valtr};
    }
}

Another approach is to use findnodes( ) and Twig's XPath-like syntax to locate the elements:

my $t = XML::Twig->new->parse( $fileContent );
for my $node ( $t->findnodes( '//valo' ) ) {
    warn "valo is: " . $node->text;
}

... Or for full XPath syntax, use XML::Twig::XPath instead:

my $t = XML::Twig::XPath->new->parse( $fileContent );
for my $node ( $t->findnodes( '//valo | //valtr' ) ) {
    warn "valo is:   " . $node->text if $node->name eq q{valo};
    warn "valtr is:  " . $node->text if $node->name eq q{valtr};
}

See the XML::Twig docs for details of the methods used here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文