perl - 循环 XML::Simple 结构

标签 perl xml-parsing xml-simple

所以我有一些像这样的 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'}

对于每个设置,但我无法循环它们。

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

非常感谢!

最佳答案

注意转储中的方括号:涉及一个数组。

for (@{ $data->{settings}{s} }) {
    print $_->{n}, ' ', $_->{v}, "\n";
}

如果您不想对 nv 进行硬编码,只需在取消引用的哈希引用上运行 keys 即可:

for my $s (@{ $data->{settings}{s} }) {
    print join(', ', map "$_ = $s->{$_}", keys %$s), "\n";
}

关于perl - 循环 XML::Simple 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10861639/

相关文章:

python - PyQuery 如何将一个元素追加和重命名到它的每个子元素中

python - 使用 ElementTree 解析空标签

perl XML::简单属性空白

perl - 如何处理终止的 perl 构造函数?

windows - 使用声音加密任何文件?

java - 从 XML 中多次提取数据的最佳且优化的方法是什么?

perl - 使用 Perl 对 XML::Simple 中的输入标签进行排序,同时以 XML 格式打印输出

perl - 为什么 Perl 在退出前不打印最后一个文本?

Perl grep 语法