我有一个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.'
?
答案 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";
}
}
}
}
}