XML::Simple behandelt Attribute fast auf dieselbe Weise wie Elemente: Sie werden als Hash gespeichert (siehe die XML-Datei in Listing D).
Wenn man diese mit XML::Simple parst, sieht die Ausgabe aus wie in Listing E. Man beachte, dass der Inhalt jedes Elements mit einem speziellen Schlüssel namens „content“ markiert wird, auf den man mit der schon besprochenen Standardnotation zugreifen kann.
Steuern des Parserverhaltens
Es gibt zwei interessante Optionen, mit denen man das Verhalten von XML::Simple steuern kann: ForceArray und KeyAttr, die üblicherweise dem Objekt-Konstruktor übergeben werden. Die Option ForceArray ist ein boolescher Wert, der XML::Simple mitteilt, XML-Elemente in normale, indizierte Arrays umzuwandeln statt in Hashs. Der Codeschnipsel in Listing F illustriert dies. Hier die dazugehörige Ausgabe:
Diese Option ist nützlich, wenn man eine konsistente Repräsentation des XML-Dokumentenbaumes in Perl erstellen will. Dazu bringt man einfach alle Elemente und Attribute in eine Array-Form und verwendet Perls Array-Funktionen, um sie zu verarbeiten.
Eine weitere wichtige Option ist KeyAttr, mit der man XML::Simple veranlassen kann, ein bestimmtes Element als eindeutigen „Schlüssel“ zu verwenden, wenn die Hash-Repräsentation eines XML-Dokuments erstellt wird. Wenn ein solcher Schlüssel angegeben wurde, wird der Wert des zugehörigen Elements (statt seines Namens) als Schlüssel innerhalb der Hash-Referenz verwendet und dient als Index für den schnellen Zugriff auf zusammengehörige Daten.
Die beste Möglichkeit zu verstehen, wie dies funktioniert, ist ein Beispiel. Hierzu dient die XML-Datei in Listing G an. Wenn man diese mit XML::Simple parst, erhält man normalerweise eine Perl-Struktur wie die in Listing H. Wenn man allerdings XML::Simple mitteilt, dass das Feld SKU ein eindeutiger Index für jedes Element ist, indem man dem Konstruktor die Option KeyAttr übergibt, wie hier:
wird sich die Perl-Struktur ändern, so dass der Wert dieses Elements als Schlüssel verwendet werden kann, wie Listing I zeigt. Damit kann man auf ein Element direkt über seine SKU zugreifen, zum Beispiel: $data->{item}->{A74}->{desc}.
Perl-Strukturen als XML schreiben
Und schließlich kann man mithilfe der Methode XMLout() von XML::Simple ein Perl-Objekt auch in ein XML-Dokument verwandeln. Hier ein Beispiel:
Und hier die Ausgabe:
Es braucht wohl nicht erwähnt zu werden, dass dieses XML-Dokument von XML::Simple auch wieder eingelesen werden kann, um die Original-Perl-Struktur wiederherzustellen.
Neueste Kommentare
Noch keine Kommentare zu XML-Dokumente mit Perls XML::Simple parsen
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.