gpt4 book ai didi

perl - 如何从 perl 中的 XML 文件中提取多个具有相同名称的标签

转载 作者:行者123 更新时间:2023-12-04 02:54:26 26 4
gpt4 key购买 nike

我的 XML 文件如下所示:

<eLinkResult>
<LinkSet>
<DbFrom>nuccore</DbFrom>
<IdList>
<Id>133909243</Id>
</IdList>
<LinkSetDb>
<DbTo>taxonomy</DbTo>
<LinkName>nuccore_taxonomy</LinkName>
<Link>
<Id>417290</Id>
</Link>
<Link>
<Id>417289</Id>
</Link>
<Link>
<Id>405948</Id>
</Link>
</LinkSetDb>
</LinkSet>
</eLinkResult>

我希望获得所有 <Id>信息,我知道如何提取如果有 <Id>像这样:

my $test="Some URL;
my $Result = get ($test);
my $Data = $Parser->XMLin($Result);
my $x=0;
if (exists($Data->{LinkSet}{LinkSetDb}->[0]->{Link}{Id})) {
$TaxId=$Data->{LinkSet}{LinkSetDb}{Link}->[0]->{Id};

或者只是

if (exists($Data->{LinkSet}{LinkSetDb}{Link}{Id})) {
$TaxId=$Data->{LinkSet}{LinkSetDb}{Link}{Id};
}

但是,当我尝试使用上面的 XML 文件时,我得到了 Not a HASH reference

我也试过

foreach  (@{$Data->{LinkSet}{LinkSetDb}{Link}{Id}}) {
Print $_;
}

但我仍然遇到错误,有没有办法让我获得所有 <Id>没有指定我想要哪一个?

最佳答案

尝试使用解析器 XML::Twig

script.pl的内容:

#!/usr/bin/env perl

use warnings;
use strict;
use XML::Twig;

my $twig = XML::Twig->new(
twig_handlers => {
'LinkSet/LinkSetDb/Link/Id' => sub {
printf qq|%s\n|, $_->text_only;
},
},
)->parsefile( shift );

使用 xml 文件作为输入参数运行它,例如:

perl script.pl xmlfile

产生:

417290
417289
405948

关于perl - 如何从 perl 中的 XML 文件中提取多个具有相同名称的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16949931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com