我正在尝试解析XML
具有以下结构的类似文件:
编辑:我试图省略大部分巨大的 xml 文件以简化所有内容,但 c/p-ed 错误。这是实际存在此问题的完整文件(900kb!):https ://docs.google.com/file/d/0B3ustNI1qZh1UURrYWZJQk0wVlU/edit?usp=sharing
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<DECLARATION>
<DECLGROUP>
<LOCALNAMESPACEPATH>
<NAMESPACE NAME="signalingsystem"/>
</LOCALNAMESPACEPATH>
<VALUE.OBJECT>
<INSTANCE CLASSNAME="SharedGtTranslator">
<PROPERTY NAME="Name" TYPE="string">
<VALUE>AUC$4,1,6,4,26202*-->AUC RemoteSPC: 300 SSN: 10</VALUE>
</PROPERTY>
<PROPERTY NAME="NatureOfAddress" TYPE="sint32">
<VALUE>4</VALUE>
</PROPERTY>
</INSTANCE>
</VALUE.OBJECT>
<VALUE.OBJECT>
<INSTANCE CLASSNAME="SharedGtTranslator">
<PROPERTY NAME="Name" TYPE="string">
<VALUE>AUC$4,2,6,4,26202*-->AUC AUC LocalSPC: 410 SSN: 10</VALUE>
</PROPERTY>
<PROPERTY NAME="NatureOfAddress" TYPE="sint32">
<VALUE>4</VALUE>
</PROPERTY>
<VALUE>2</VALUE>
</PROPERTY>
</INSTANCE>
</VALUE.OBJECT>
</DECLGROUP>
</DECLARATION>
</CIM>
我正在使用 XMLSimple 来解析该结构。NAME="Name"
如果CLASSNAME="SharedGtTranslator"
. _
这就是我想要做的:
#!/usr/bin/perl
use strict;
use warnings;
# use module
use XML::Simple;
use Data::Dumper;
my $file1 = $ARGV[0];
# create object
my $xml = new XML::Simple;
# read XML file
my $data = $xml->XMLin($file1);
foreach my $object (@{$data->{DECLARATION}->{DECLGROUP}->{'VALUE.OBJECT'}}) {
if ($object->{INSTANCE}->{CLASSNAME} eq 'SharedGtTranslator') {
foreach my $property (@{$object->{INSTANCE}->{PROPERTY}}) {
if ($property->{NAME} eq 'Name') {
print $property->{VALUE} . "\n";
}
}
}
}
得到
“伪散列已弃用”
什么也没有发生。
高度赞赏帮助!