XML-Dokumente mit Perls XML::Simple parsen

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.

Page: 1 2 3

ZDNet.de Redaktion

Recent Posts

Digitale Produkte „cyberfit“ machen

Vernetzte Produkte müssen laut Cyber Resilience Act über Möglichkeiten zur Datenverschlüsselung und Zugangsverwaltung verfügen.

3 Tagen ago

Google schließt schwerwiegende Sicherheitslücken in Chrome 131

Das jüngste Update für Windows, macOS und Linux stopft drei Löcher. Eine Anfälligkeit setzt Nutzer…

3 Tagen ago

Apple schließt Zero-Day-Lücken in iOS, iPadOS und macOS

Zwei von Google-Mitarbeitern entdeckte Schwachstellen werden bereits aktiv gegen Mac-Systeme mit Intel-Prozessoren eingesetzt. Sie erlauben…

3 Tagen ago

Gefährliche Anzeigen für Passwortmanager Bitwarden verbreiten Malware

Die Hintermänner haben es unter anderem auf Daten von Facebook-Geschäftskonten abgesehen. Opfer werden über angebliche…

4 Tagen ago

Public Cloud: Gartner erwartet 2025 weltweite Ausgaben von 723 Milliarden Dollar

Bis 2027 werden 90 Prozent der Unternehmen eine Hybrid-Cloud-Strategie umsetzen.

4 Tagen ago

iPhone 15 ist bestverkauftes Smartphone im dritten Quartal

Apple belegt in der Statistik von Counterpoint die ersten drei Plätze. Samsungs Galaxy S24 schafft…

4 Tagen ago