Der Baummodus von XML::Parser

(Auszug aus "Perl & XML" von Erik T. Ray & Jason McIntosh)

Wir haben XML::Parser bereits in Kapitel 4 als Generator von Eventströmen benutzt. Wußten Sie, daß man dasselbe Modul auch zum Aufbau von Baumstrukturen verwenden kann? Bleiben wir bei unserem Beispiel und schreiben unser Programm zum Lesen einer Konfigurationsdatei so um, daß es die Datei mit XML::Parser liest und anschließend dessen Baum ausgibt. Das geänderte Programm sehen Sie im nächsten Beispiel.

Beispiel: Aufbau einer Baumstruktur mit XML::Parser

# Initialisierung des Parsers und Lesen der Datei
use XML::Parser;
$parser = new XML::Parser( Style => 'Tree' );
my $tree = $parser->parsefile( shift @ARGV );

# Ausgabe der Baumstruktur
use Data::Dumper;
print Dumper( $tree );

Mit der Eingabedatei aus diesem Beispiel erhalten wir damit die folgende Ausgabe:

$tree = [           
     'konfiguration', [
       {}, 0, '\n',
       'zeichensatz', [
          { 'role' => 'console' }, 0, '\n',
          'groesse', [ {}, 0, '9' ], 0, '\n',
          'fname', [ {}, 0, 'Courier' ], 0, '\n'
       ], 0, '\n',
       'zeichensatz', [
          { 'role' => 'default' }, 0, '\n',
          'fname', [ {}, 0, 'Times New Roman' ], 0, '\n',
          'groesse', [ {}, 0, '14' ], 0, '\n'
        ], 0, '\n',        
        'zeichensatz', [
          { 'role' => 'titles' }, 0, '\n',
          'groesse', [ {}, 0, '10' ], 0, '\n',
          'fname', [ {}, 0, 'Helvetica' ], 0, '\n',
        ], 0, '\n',
       ]
     ];

Diese Struktur ist komplizierter als die von XML::Simple. Sie konserviert erheblich mehr, unter anderem den Knotentyp, die Reihenfolge der Knoten und die Mischung von Text und Kindelementen. Jeder Knoten wird durch einen oder zwei Einträge in einer Liste repräsentiert. Elemente benötigen zwei Einträge: den Elementnamen, gefolgt von der Liste seiner Kindknoten. Textknoten werden durch die Zahl 0 gefolgt vom enthaltenen Text als String dargestellt. Die Attribute eines Elements findet man in einer Hashreferenz. Diese Hashreferenz ist der erste Eintrag in der Knotenliste eines Elements. Selbst die Leerzeichen zwischen den Elementen bleiben erhalten, sie werden als 0, \n repräsentiert. Die Reihenfolge der Kindknoten bleibt erhalten, weil sie in einer Liste stehen. Es gibt XML-Dokumente, bei denen diese Reihenfolge wichtig ist, zum Beispiel Bücher oder Animationen. In beiden Fällen bilden die Elemente eine geordnete Folge.

Im Unterschied zu XML::Simple kann XML::Parser die von ihm selbst aufgebaute Datenstruktur nicht zurück in XML umwandeln. Für eine bidirektionale Lösung brauchen Sie also etwas anderes. Vielleicht etwas Objektorientiertes.

  

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Perl & XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2003 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Perl & XML" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de