ver*_*dra 3 perl reference data-structures
大家好,
这对于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'],);
Run Code Online (Sandbox Code Playgroud)
倾销$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.
],
};
Run Code Online (Sandbox Code Playgroud)
如何访问服务和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};
}
Run Code Online (Sandbox Code Playgroud)
你能帮助我如何从Supplier-> HW获得所有Nr和Type值.
我建议阅读perldocs 参考教程和参考资料以及嵌套数据结构.它们包含有关如何访问这类数据的介绍和完整说明.
但是,例如,您可以通过执行以下操作来访问服务ID:
say $data->{Service}[0]{Id} # prints SKRM
Run Code Online (Sandbox Code Playgroud)
您可以通过循环遍历所有服务,打印其ID:
foreach my $service (@{ $data->{Service} }) {
say $service->{Id};
}
Run Code Online (Sandbox Code Playgroud)
$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};
}
Run Code Online (Sandbox Code Playgroud)
注意[0]你缺少的决赛.
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |