首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环通过XML::Simple structure

循环通过XML::Simple structure
EN

Stack Overflow用户
提问于 2012-06-02 18:38:48
回答 1查看 8.5K关注 0票数 2

所以我有一些xml文件,如下所示:

代码语言:javascript
运行
复制
<?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打印输出时得到的结果:

代码语言:javascript
运行
复制
$VAR1 = {
      'settings' => {
                      'user' => 'anonymous',
                      's' => [
                               {
                                 'n' => 'blabla1',
                                 'v' => 'true'
                               },
                               {
                                 'n' => 'blabla2',
                                 'v' => 'false'
                               },
                               {
                                 'n' => 'blabla3',
                                 'v' => 'true'
                               }
                             ]
                    },
      'result' => '0'
    };

下面是我的代码

代码语言:javascript
运行
复制
 $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";
 }

它返回这两行代码,没有循环:

代码语言:javascript
运行
复制
TEST: n blabla1 true
TEST: v blabla1 true

我也试着这样做:

代码语言:javascript
运行
复制
foreach $s (keys @{ $data->{'settings'}->{'s'} }) {

没有任何成功:

代码语言:javascript
运行
复制
Type of arg 1 to keys must be hash (not array dereference) 

我可以打印:

代码语言:javascript
运行
复制
$data->{'settings'}->{'s'}->[1]->{'n'} $data->{'settings'}->{'s'}->[1]->{'v'}

每个设置,但我不能遍历它们。

我该如何继续?我做错了什么?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-02 19:14:56

注意转储文件中的方括号:其中包含一个数组。

代码语言:javascript
运行
复制
for (@{ $data->{settings}{s} }) {
    print $_->{n}, ' ', $_->{v}, "\n";
}

如果您不想硬编码nv,只需对取消引用的散列引用运行keys

代码语言:javascript
运行
复制
for my $s (@{ $data->{settings}{s} }) {
    print join(', ', map "$_ = $s->{$_}", keys %$s), "\n";
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10861639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档