Perl XML解析器

时间:2013-11-04 19:34:10

标签: xml perl xml-parsing

我有一个XML文件,我使用XML::Parser Perl模块进行解析。解析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.'

2 个答案:

答案 0 :(得分:3)

我建议你不要使用XML::Parser,而是使用XPath表示法来查找XML中的特定元素(通过XML::LibXML方法)。

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

XML :: LibXML是described here,而您可以获得有关XPath notation here的更多信息。

答案 1 :(得分: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";
                }
            }
        }
    }
}