如何使用perl中的XML :: Simple解析以下xml字段
<SelectedSections>
<Section Name="A_1" />
<Section Name="B_1" />
</SelectedSections>
这样我就可以输出
A_1
B_1
我试过这样的事情:
#!/usr/bin/perl
use XML::Simple;
use strict;
use warnings;
use Data::Dumper;
my $xml = XML::Simple->new;
my $file1 = 'testxml';
my $data = $xml->XMLin($file1);
print $data->{SelectedSections}->{Section-> 'Name'} ,"\n";
答案 0 :(得分:1)
如果不确定XML创建的数据结构是什么,请转储它。在我们的例子中,我们得到了这个:
{ Section => [{ Name => "A_1" }, { Name => "B_1" }] }
所以要打印出名字,我们必须这样做
say $data->{Section}[0]{Name};
要打印出所有部分,我们可以
for my $section (@{ $data->{Section} }) {
say $section->{Name};
}
XML :: Simple的问题在于,预测由一段XML创建的数据结构非常困难。像XML::LibXML
这样的其他XML接口更加一致(XML::LibXML
使用标准化的DOM接口)。例如,我会像这样解决这个问题:
use strict;
use warnings;
use feature 'say';
use XML::LibXML;
my $xml = XML::LibXML->load_xml(location => "filename.xml");
for my $name ($xml->findnodes('/SelectedSections/Section/@Name')) {
say $name->value;
}
传递给findnodes
方法的字符串是一个XPath表达式,可用于在相当复杂的XML文档中轻松访问部分。
答案 1 :(得分:0)
使用XML::Simple
,您可以按照以下方式执行此操作
my $xml = XML::Simple->new;
my $file1 = 'test.xml';
my $data = $xml->XMLin($file1);
print(Dumper($data));
# If you print this dumper you will see that the 'SelectedSections' is not in $data
my @sections = @{$data->{Section}};
foreach my $s (@sections) {
print($s->{Name} . "\n");
}
输出:
$VAR1 = {
'Section' => [
{
'Name' => 'A_1'
},
{
'Name' => 'B_1'
}
]
};
A_1
B_1