XML-Simple fehler bei mehreren gleichnamigen Tags

29/10/2008 - 09:59 von Gerhard Wolf | Report spam
Hallo,

mit dem Script:

#!usr/bin/perl -w
use warnings;
use strict;
use XML::Simple;
use Data::Dumper;

my @files;
my $BOptions;

...
...
# Arbeitsverzeichnis ausgeben
$BOptions = "BOptions.xml";
my $ref = XMLin($BOptions);
print Dumper($ref->{Ports}->{a}); #ausgabe noch o.k.
print $ref->{Ports}->{a}; # Not a HASH reference...

erhalte ich das richtige Ergebnis wenn der Tag <Ports> einmalig in der
XML-Datei ist. Kommt er jedoch mehrfach vor bekomme ich den Fehler
"Not a HASH reference at # bei Zeile print $ref->{Ports}->{QQComPort}
wie kann ich bei mehreren Tags auf das Erste bzw. andere zugreifen? bzw.
den Fehler beheben?


<Ports>
<a>bla</a>
</Ports>

<Ports>
<a>blabla</a>
</Ports>
 

Lesen sie die antworten

#1 Wolf Behrenhoff
29/10/2008 - 10:24 | Warnen spam
Gerhard Wolf wrote:
Hallo,

mit dem Script:

# Arbeitsverzeichnis ausgeben
$BOptions = "BOptions.xml";
my $ref = XMLin($BOptions);
print Dumper($ref->{Ports}->{a}); #ausgabe noch o.k.
print $ref->{Ports}->{a}; # Not a HASH reference...

erhalte ich das richtige Ergebnis wenn der Tag <Ports> einmalig in der
XML-Datei ist. Kommt er jedoch mehrfach vor bekomme ich den Fehler
"Not a HASH reference at # bei Zeile print $ref->{Ports}->{QQComPort}
wie kann ich bei mehreren Tags auf das Erste bzw. andere zugreifen? bzw.
den Fehler beheben?



Siehe perldoc XML::Simple!

Wenn ein Tag mehrmals vorkommt, ist das ja auch keine Hash-Referenz mehr
möglich (wie sollte ein Hash auch 2x denselben Key enthalten können?),
sondern dann wird ein Array zurückgegeben, wie du eigentlich auch schön
im Data::Dumper sehen solltest! Also ... $ref->{Ports}[0 bis Anzahl
gleicher Elemente-1]{a}. Mit ForceArray kannst du das Array auch bei nur
1 Element erzwingen.

- Wolf

Ähnliche fragen