Schrift
[thread]11384[/thread]

Beobachtung bei XML::Simple

Leser: 1


<< >> 5 Einträge, 1 Seite
skirnir
 2008-02-29 12:39
#106494 #106494
User since
2006-05-09
29 Artikel
BenutzerIn
[default_avatar]
Hallo,

Wenn ich folgendes Programm ausführe:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl
use strict;
use warnings;

use XML::Simple;
use Data::Dumper;

my $hashref = { parent => {
                                                one => { name => "aname", other => "something"},
                                                two => { name => "anothername", stuff => "bladder"}
                                            }
                         };

print Dumper($hashref). "\n";
print XMLout($hashref). "\n";

Bekomme ich folgende Ausgabe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$VAR1 = {
'parent' => {
'one' => {
'other' => 'something',
'name' => 'aname'
},
'two' => {
'name' => 'anothername',
'stuff' => 'bladder'
}
}
};

<opt>
<parent name="aname" other="something" />
<parent name="anothername" stuff="bladder" />
</opt>

Also geht die Information in den Keys "one" und "two" verloren, weil die Ebene darunter 'name' als Key hat (sieht jedenfalls für mich nach etwas rumprobieren so aus)

Wenn ich XML::Simple im strict-mode verwende, also
Zeile 5:
Code (perl): (dl )
use XML::Simple qw(:strict);

und Zeile 15:
Code (perl): (dl )
print XMLout($hashref, KeyAttr => []);

bekomme ich:
Code: (dl )
1
2
3
4
5
6
<opt>
<parent>
<one name="aname" other="something" />
<two name="anothername" stuff="bladder" />
</parent>
</opt>

(Der Dump bleibt natürlich gleich)

Das überrascht mich jetzt etwas. Ich hätte eher erwartet, eine warning wegen der hashref zu bekommen, aber dass ich jetzt plötzlich stillschweigend das bekomme, was ich gerne hätte, finde ich strange und in der Doku habe ich dieses Verhalten nicht dokumentiert gefunden.
Könnt ihr mir sagen, ob und wenn ja, warum das Verhalten so Sinn macht?

Edit: perl-code korrigiert
renee
 2008-02-29 12:47
#106495 #106495
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das Verhalten ist dokumentiert:

perldoc XML::Simple
Note 1: The default value for 'KeyAttr' is ['name', 'key', 'id']. If you do not want folding on input or unfolding on output you must setting this option to an empty list to disable the feature.


Du muss das gar nicht im strict-Mode verwenden. Bei Deiner Ausgabe einfach das KeyAttr => [] hinzufügen und schon hast Du Dein gewünschtes Ergebnis...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
skirnir
 2008-02-29 12:51
#106497 #106497
User since
2006-05-09
29 Artikel
BenutzerIn
[default_avatar]
Oops.
Danke für den Hinweis.
ptk
 2008-02-29 21:21
#106522 #106522
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ich sage dazu nur: ein Schema schreiben und CPAN:XML::Compile verwenden.
skirnir
 2008-03-01 13:03
#106543 #106543
User since
2006-05-09
29 Artikel
BenutzerIn
[default_avatar]
@ptk: Es ging nur darum, zu Testzwecken ein Objekt "mal eben" auf der Platte zu speichern. Habe ich dann mit CPAN:YAML gemacht, bevor meine Neugier zu groß wurde, um die CPAN:XML::Simple Lösung einfach zu vergessen.
Aber danke, so habe ich Lesestoff während des angekündigten Dreckswetters am Wochenende ;-)
<< >> 5 Einträge, 1 Seite



View all threads created 2008-02-29 12:39.