大家好,
这对于perl程序员来说非常简单,但不是像我这样的初学者
我有一个xml文件,我使用XML :: Simple像这样处理
my $file="service.xml";
my $xml = new XML::Simple;
my $data = $xml->XMLin("$file", ForceArray => ['Service','SystemReaction',
'Customers', 'Suppliers','SW','HW'],);
倾销$data
,看起来像这样:
$data = {
'Service' => [{
'Suppliers' => [{
'SW' => [
{'Path' => '/work/service.xml', 'Service' => 'b7a'},
{'Path' => '/work/service1.xml', 'Service' => 'b7b'},
{'Path' => '/work/service2.xml', 'Service' => 'b5'}]}
],
'Id' => 'SKRM',
'Customers' =>
[{'SW' => [{'Path' => '/work/service.xml', 'Service' => 'ASOC'}]}],
'Des' => 'Control the current through the pipe',
'Name' => ' Control unit'
},
{
'Suppliers' => [{
'HW' => [{
'Type' => 'W',
'Path' => '/work/hardware.xml',
'Nr' => '18',
'Service' => '1'
},
{
'Type' => 'B',
'Path' => '/work/hardware.xml',
'Nr' => '7',
'Service' => '1'
},
{
'Type' => 'k',
'Path' => '/work/hardware.xml',
'Nr' => '1',
'Service' => '1'
}]}
],
'Id' => 'ADTM',
'Customers' =>
[{'SW' => [{'Path' => '/work/service.xml', 'Service' => 'SDCR'}]}],
'Des' => 'It delivers actual motor speed',
'Name' => ' Motor Drivers and Diognostics'
},
# etc.
],
'Systemreaction' => [
# etc.
],
};
如何访问服务和systemReaction中的每个元素(未提供)。因为我正在使用" $ data"在进一步处理中。所以我需要访问每个服务中的每个Id,客户,供应商的价值。如何从服务中获取特定值以使用该值执行某些过程。例如,我需要从服务中获取所有Id值并为每个id值创建节点。
要获得Type和Nr值,我尝试了这样
foreach my $service (@{ $data->{Service}[1]{Suppliers}[0]{HW}[0] }) {
say $service->{Nr};
}
foreach my $service (@{ $data->{Service}[1]{Suppliers}[0]{HW}[0] }) {
say $service->{Type};
}
您可以帮我了解如何从Supplier-> HW获得所有Nr和Type值。
答案 0 :(得分:8)
我建议您阅读perldocs Reference Tutorial和References and Nested Data Structures。它们包含有关如何访问这类数据的介绍和完整说明。
但是,例如,您可以通过执行以下操作来访问服务ID:
say $data->{Service}[0]{Id} # prints SKRM
你可以通过循环遍历所有服务,打印他们的ID:
foreach my $service (@{ $data->{Service} }) {
say $service->{Id};
}
$data->{Service}[1]{Suppliers}[0]{HW}[0]
是一个哈希引用(您可以使用Data::Dumper
或Data::Dump
或ref
函数快速查看。特别是{ Nr => 18, Path => "/work/hardware.xml", Service => 1, Type => "W" }
换句话说,你几乎得到了它 - 你只是过了一层。它应该是:
foreach my $service (@{ $data->{Service}[1]{Suppliers}[0]{HW} }) {
say $service->{Nr};
}
请注意缺少最终的[0]
。