使用XML :: Simple解析XML表

时间:2015-07-20 10:08:38

标签: xml perl hash

我一直在使用XML::Simple很长一段时间没有问题,但我面临的情况是我从未遇到过我无法解决的问题。

我有一个看起来像这样的XML文件

$VAR1 = {
          'lvl1' => [
                     {
                       'lvl2' => [
                                 {
                                   'id' => 'myID1',
                                   'type' => 'Type1',
                                 },
                                 {
                                   'id' => 'myId2',
                                   'type' => 'Type2',
                                 }
                               ]
                     }
                   ]
        };

我通常使用:

my $xml = XMLin('filename.xml');

foreach my $element (@{$xml->{lvl1}->{lvl2}) {
    ...
}

但在这种情况下它不起作用,因为[]在哈希中引入了表。我已经尝试了很多东西试图通过这个但我找不到任何方法可以让我访问所有元素而不会抛出not a hash reference错误。

2 个答案:

答案 0 :(得分:3)

您的数据结构中引入了几个数组引用(由[]而不是{}分隔用于哈希引用)。鉴于你没有使用ForceArray选项,我假设在你的真实文件中你在lvl1下有几个lvl2元素?

XML :: Simple只要有多个同名元素被分组,就会将数组引入数据结构中。如果您不确定是否会获得一个或多个元素,可以使用ForceArray选项强制执行该数组:

[objPopovercontroller presentPopoverFromRect:CGRectOffset(CGRectMake(SCREEN_WIDTH-40, 60, 0, 0), -1, 0) 
                                      inView:self.view 
                    permittedArrowDirections:UIPopoverArrowDirectionUp 
                                    animated:YES]; 

// SCREEN_WIDTH = (IS_IPAD?1024:[UIScreen mainScreen].bounds.size.width)

然后你可以使用Code choroba给出的lvl2访问数组:

my $xml = XMLin('filename.xml', ForceArray => ['lvl1']);

答案 1 :(得分:1)

我猜你使用XML::Simple

方括号在Perl中引入数组(而不是表)。要索引数组,请使用方括号:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="span_group">
  <span>1</span>
  <span>2</span>
  <span>3</span>
  <span>4</span>
  <span>5</span>
</div>