【发布时间】:2011-05-14 04:41:18
【问题描述】:
我在 Perl 中使用XML::Simple 来解析 XML 文件,但我一直在思考如何构建一个循环来遍历哈希中数组的所有可能元素。
这里是如何打印数组的第 0 个元素:
print $book_info->{BookList}->{BookData}->{Prices}->{Price}[0]->{is_new};
在使用哈希与数组这两个词时,我的术语可能不正确,但我正在尝试遍历 {Price}[$ref] 中的所有元素
我试过了:
my @refs = $book_info->{BookList}->{BookData}->{Prices}->{Price};
foreach(@refs)
{
print $book_info->{BookList}->{BookData}->{Prices}->{Price}[$_]->{store_id};
print "\n";
}
和
foreach my $key (keys (%{$book_info->{BookList}->{BookData}->{Prices}->{Price}}))
{
print $key."\n";
}
下一个打印语句返回值"ARRAY(0x159a57c)"
print [$book_info->{BookList}->{BookData}->{Prices}->{Price}];
这适用于 foreach,但我无法正确访问元素:
foreach (@{$book_info->{BookList}->{BookData}->{Prices}->{Price}})
{
print $book_info->{BookList}->{BookData}->{Prices}->{Price}[$_]; #this line is wrong
}
有什么建议吗? {Prices} 元素中有多个{Price} 元素,每个{Price} 元素在XML 中都有[x] 属性。
【问题讨论】:
-
我没有使用过 XML::Simple,但我认为
$book_info->{BookList}->{BookData}->{Prices}->{Price}是数组引用,因此您需要像@( $book_info->{BookList}->{BookData}->{Prices}->{Price})那样取消引用它。还包括您现在从脚本中获得的输出。 -
我尝试了
foreach (@($book_info->{BookList}->{BookData}->{Prices}->{Price}))并得到了Scalar found where operator expected.....
标签: xml arrays perl hash foreach