所以我有一些xml文件,如下所示:
<?xml version="1.0" encoding="ISO-8859-1"?>
<root result="0" >
<settings user="anonymous" >
<s n="blabla1" >
<v>true</v>
</s>
<s n="blabla2" >
<v>false</v>
</s>
<s n="blabla3" >
<v>true</v>
</s>
</settings>
</root>我想使用XML Simple遍历所有的设置。
下面是我使用Data::Dumper打印输出时得到的结果:
$VAR1 = {
'settings' => {
'user' => 'anonymous',
's' => [
{
'n' => 'blabla1',
'v' => 'true'
},
{
'n' => 'blabla2',
'v' => 'false'
},
{
'n' => 'blabla3',
'v' => 'true'
}
]
},
'result' => '0'
};下面是我的代码
$xml = new XML::Simple;
$data = $xml->XMLin($file);
foreach $s (keys %{ $data->{'settings'}->{'s'} }) {
print "TEST: $s $data->{'settings'}->{'s'}->[$s]->{'n'} $data->{'settings'}->{'s'}->[$s]->{'v'}<br>\n";
}它返回这两行代码,没有循环:
TEST: n blabla1 true
TEST: v blabla1 true我也试着这样做:
foreach $s (keys @{ $data->{'settings'}->{'s'} }) {没有任何成功:
Type of arg 1 to keys must be hash (not array dereference) 我可以打印:
$data->{'settings'}->{'s'}->[1]->{'n'} $data->{'settings'}->{'s'}->[1]->{'v'}每个设置,但我不能遍历它们。
我该如何继续?我做错了什么?
非常感谢!
发布于 2012-06-02 19:14:56
注意转储文件中的方括号:其中包含一个数组。
for (@{ $data->{settings}{s} }) {
print $_->{n}, ' ', $_->{v}, "\n";
}如果您不想硬编码n和v,只需对取消引用的散列引用运行keys:
for my $s (@{ $data->{settings}{s} }) {
print join(', ', map "$_ = $s->{$_}", keys %$s), "\n";
}https://stackoverflow.com/questions/10861639
复制相似问题