gpt4 book ai didi

perl - 如何访问 XML::Simple 返回的数据结构中的值?

转载 作者:行者123 更新时间:2023-12-01 06:09:45 25 4
gpt4 key购买 nike

大家好,
这对 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.
],
};

如何访问 service 和 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};

}

你能帮我如何从供应商->硬件获取所有 Nr 和 Type 值吗?

最佳答案

我建议阅读 perldocs Reference TutorialReferences 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::DumperData::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]

关于perl - 如何访问 XML::Simple 返回的数据结构中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8524125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com