【发布时间】:2017-09-20 08:48:22
【问题描述】:
我想从 XML 文件中提取一些字符串。 我的 XML 文件如下:-
<PartNumber name="750">
<SubComponent name="FPGA">
<SubComponentItem name="0" device_name="golden" desc="GPCAM FPGA Golden Image" rev="0x002a0023" type="FPGA_T6E_PIC" cache="yes" />
<SubComponentItem name="1" device_name="user" desc="GPCAM FPGA User Image" rev="0x002a0023" type="FPGA_T6E_PIC" cache="yes" />
</SubComponent>
<SubComponent name="LTC">
<SubComponentItem name="0" desc="ltc3880-1.0v-0" rev="0x0003" type="PMBUS_T6E_QSFP28" device_name="ltc3880-1.0v" index="0xb4" />
<SubComponentItem name="1" desc="ltc3880-3.3v" rev="0x0003" type="PMBUS_T6E_QSFP28" device_name="ltc3880-3.3v" index="0xb4" />
</SubComponent>
<SubComponent name="EEPROM">
<SubComponentItem name="0" desc="BCM8238X Retimer 0 ver" device_name="SLOT_NUMBER/%SLOT_NUMBER/0" rev="D00E" type="BCM8238X_EEPROM" cache="yes" />
<SubComponentItem name="1" desc="BCM8238X Retimer 0 checksum" device_name="SLOT_NUMBER/%SLOT_NUMBER/0" checksum="600D" type="BCM8238X_EEPROM" cache="yes" />
<SubComponentItem name="2" desc="BCM8238X Retimer 1 ver" device_name="SLOT_NUMBER/%SLOT_NUMBER/0" rev="D00E" type="BCM8238X_EEPROM" cache="yes" />
<SubComponentItem name="3" desc="BCM8238X Retimer 1 checksum" device_name="SLOT_NUMBER/%SLOT_NUMBER/0" checksum="600D" type="BCM8238X_EEPROM" cache="yes" />
</SubComponent>
</PartNumber>
例如,我想提取 PartNumber 名称 =750 和 SubComponentItem 名称 =FPGA 中的 rev 值。我怎样才能提取它?并存储它。
我试过下面的代码,但还是遇到了一些错误,下面是我的代码:-
use strict;
use warnings;
use XML::Simple;
use Data::Dumper;
my $simple = XML::Simple->new();
my $data = $simple->XMLin('/cy/programable/1ProgrammableRevision.xml');
print Dumper($data) . "\n";
print $data->{PartNumber}->{750}->{FPGA}->{0}->{rev}->[1];
供您参考,我的 perl 版本 5.8.8 和 XML::libxml 或 XML::Twig 不适用。
【问题讨论】:
-
为什么要安装一个库(
XML::Simple不是核心)而不是其他库,当它们明显更好时? -
XML::Simple is Nasty.. 评价者使用 Twig。
-
我喜欢
XML::Twig,因为它易于上手。我喜欢XML::LibXML,因为它功能齐全且功能强大。 -
我不明白为什么有人会在阅读the warnings in the documentation 后使用 XML::Simple。
-
您可以在本地安装模块。但如果你不能,请通读"Why is XML::Simple discouraged" 并安装替代品。