2

我有一个使用XML::ParserPerl 模块解析的 XML 文件。解析 XML 的代码:

..........................................
$parser = XML::Parser->new(Style => 'Tree');
$my_map = $parser->parse($xml);
print Dumper($my_map->[1]) . "\n";

声明结果print Dumper($my_map->[1])

$VAR1 = [
          {},
          0,
          '
            ',
          'lfs',
          [
            {
              'name' => 'ABC'
            },
            0,
            '
                 ',
            'FS',
            [
              {
                'status' => '1',
                'acc' => '/tmp',
                'kind' => 'ass'
              }
            ],
            0,
            '
            '
          ],
          0,
          '
            ',
          'lfs',
          [
            {
              'name' => 'BCG'
            },
            0,
            '
                 ',
            'FS',
            [
              {
                'status' => '1',
                'acc' => '/home/tmpspace/tmp1',
                'kind' => 'oops'
              }
            ],
            0,
            '
                 ',
            'FS',
            [
              {
                'status' => '1',
                'acc' => '/home/tmpspace/tmp2',
                'kind' => 'hops'
              }
            ],
            0,
            '
            '
          ],
          0,
          '
            ',
          'lfs',
          [
            {
              'name' => 'KMN'
            },
            0,
            '
                 ',
            'FS',
            [
              {
                'status' => '1',
                'acc' => '/misc/ib',
                'kind' => 'nops'
              }
            ],
            0,
            '
            '
          ],
          0,
          '
            ',
          'lfs',
          [
            {
              'name' => 'MAIN'
            },
            0,
            '
                 ',
            'FS',
            [
              {
                'status' => '1',
                'acc' => 'This is the string that I wanted.',
                'kind' => 'mount'
              }
            ],
            0,
            '
            '
          ],
          0,
          '
    '
        ];

$my_map->[1],我想得到'acc' => 'This is the string that I wanted.'。如何'acc' => 'This is the string that I wanted.'有效地获取?

4

2 回答 2

3

而不是XML::Parser,我建议您考虑使用XML::LibXMLinstead ,然后使用 XPath 表示法在您的 XML 中查找特定元素(通过findnodes()方法)。

这样做可以让您获得 XML 文档中的某些节点,而无需完全了解其完整结构(或者,取决于以特定方式格式化的源 XML)。

XML::LibXML在此处进行了描述,而您可以在此处获得有关XPath 表示法的更多信息。

于 2013-11-04T19:53:42.013 回答
3

尝试这样做,迭代每个 ARRAY 级别:

use strict; use warnings;

foreach my $first_level (@$VAR1) {
    if(ref $first_level eq "ARRAY") {
        foreach my $second_level (@{ $first_level }) {
            if(ref $second_level eq "ARRAY") {
                foreach my $third_level (@{ $second_level }) {
                    print $third_level->{acc}, "\n";
                }
            }
        }
    }
}
于 2013-11-04T19:59:13.723 回答