Das Parsen einer XML Datei mit dem Perl-XMLSimple

Ich versuche zu analysieren, eine XML-wie-Datei mit der folgenden Struktur:

Bearbeiten:
Ich versuchte weglassen, die meisten der riesigen xml-Datei zu vereinfachen, aber alles c/p-ed-zu Unrecht. Hier die vollständige Datei (900 Kb!) tatsächlich hat dieses Problem: 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>

Ich bin mit XMLSimple zu analysieren, die Struktur.
Ich brauchen, um alle Werte für die EIGENSCHAFT NAME="Name" wenn CLASSNAME="SharedGtTranslator".

Dies ist, was ich versuche zu tun:

#!/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";
                        }
                }

        }
}

Immer

"Pseudo-hashes sind veraltet"

nichts passiert.

Hilfe ist sehr geschätzt!

  • Im XML-Code eine fehlende EIGENSCHAFT tag. Wenn ich Feste, dass der code, den Sie geliefert funktioniert, außer für ein nicht initialisiertes Warnung.
  • Eigentlich war das ein Fehler von meiner Seite. Ich versuchte weglassen, die meisten der riesigen xml-Datei zu vereinfachen, aber alles c/p-ed-zu Unrecht. Hier die vollständige Datei (900 Kb!): docs.google.com/file/d/0B3ustNI1qZh1UURrYWZJQk0wVlU/...
  • Die kryptischen "Pseudo-hashes sind veraltet" - Meldung tritt auf, wenn Sie versuchen, einen index in eine arrayref, als ob es eine hashref. Ich empfehle die kurze, aber informative Perl-Referenzen-tutorial, ich Stimme auch mit @Borodin Beratung der Verwendung von XML::LibXML statt.
InformationsquelleAutor vobelic | 2013-04-23
Schreibe einen Kommentar