Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  XML
Letztes Update: 16.08.2005 17:53:45


Navigation

Seite News *

Seite Startseite
Seite Über SELFPHP
Seite Werbung
Seite Kontakt
Seite Forum *
Seite Download *
Seite SELFPHP Banner *
Seite SELFPHP in Buchform
Seite Newsletter *
Seite Impressum

 
* Link führt ins Internet



 

Erzeugen eines XML-Parsers




Ein XML Parser wird immer für das jeweilige XML-Dokument individuell erzeugt. Hier nun ein Parser, der auf das folgende XML Dokument angepasst wurde.


XML-Dokuement Daten.xml


Hier haben wir die Daten.

Dieses XML Dokument wird von dem folgendem Parser verarbeitet.


PHP-Dokument daten.php



<?php
function startElement($parser, $element_name, $element_attribute) {
    global
$ausgabe;
    
//Umwandeln in Kleinbuchstaben
    
$element_name = strtolower($element_name);
    
//Überprüfung des Elementnames
    
if ($element_name=="daten") {
        
$ausgabe .= "<h3>Daten</h3><p>";
    }
}
function
endElement($parser, $element_name) {
    global
$ausgabe;
    
// Umwandeln in Kleinbuchstaben
    
$element_name = strtolower($element_name);
    
// Überprüfung des Elementnames
    
if ($element_name=="daten") {
        
$ausgabe .= "</p>";
    }
}
function
cdata($parser, $element_inhalt) {
    global
$ausgabe;
    
// Normale Text wird an $ausgabe angehängt
    
$ausgabe .= $element_inhalt;
}

$xmlFile = file("daten.xml");
$parser = xml_parser_create();

xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "cdata");

foreach(
$xmlFile as $element) {
    
xml_parse($parser, $element);
}

xml_parser_free($parser);
echo
$ausgabe;
?>



Die Ausgabe nach dem Aufruf des Skriptes sieht wie folgt aus:



Um die Arbeitsweise des Skriptes zu verstehen, sollte jede der definierten Funktionen einzelne betrachtet werden.

Zunächst wenden wir uns der Funktion zu, die aufgerufen wird, wenn Expat ein öffnendes Element vorfindet. In vorliegenden Beispiel ist dies .

An die Funktion wird die Variable $parser übergeben. In ihr wird auf den erzeugten XML Parser verwiesen. Über die Variable $element_name wird der Name des Elementes übergeben. Im Beispiel ist der Name des Elementes "daten".

In der ersten Zeile der Funktion selbst wird auf die globale Variable $ausgabe verwiesen. So kann man direkt auf den Wert der Variablen zugreifen, ohne diesen an die Funktion zu übergeben. Zudem kann der Wert auch direkt aus der Funktion heraus verändert werden.



function startElement($parser, $element_name, $element_attribute) {
    global $ausgabe;
    //Umwandeln in Kleinbuchstaben
    $element_name = strtolower($element_name);
    //Überprüfung des Elementnames
    if ($element_name=="daten") {
        $ausgabe .= "<h3>Daten</h3><p>";
    }
}



Die nächste Anweisung wandelt den Namen des Elementes in Kleinbuchstaben um, da Expat die Namen eines Elementes immer in Großbuchstaben übergibt. Dies muss nicht gemacht werden, dient aber zu einem einfacheren Verständnis des Codes. Im nächsten Teil wird überprüft, ob der Name des Elementes "daten" ist. Ist dies der Fall, wird an die Variable $ausgabe der Inhalt "<h3>Daten</h3><p>" angehängt.

Nun, wollen wir uns mit der Funktion für den normalen Fließtext, CDATA kümmern. Diese hat nur eine Aufgabe. Sie muss den Inhalt des Elemenets an die Variable $ausgabe anhängen.



function cdata($parser, $element_inhalt) {
    global $ausgabe;
    // Normale Text wird an $ausgabe angehängt
    $ausgabe .= $element_inhalt;
}



Der Inhalt des aktuell geparsten Element wird über die Variable $element_inhalt übergeben. Dieser wird an die Variable $ausgabe angehängt.

Die letzte Funktion ist für die schließenden Elemente zuständig. Diese Funktion arbeitet auf der gleichen Weise, wie die Funktion für das öffnende Element.



function endElement($parser, $element_name) {
    global $ausgabe;
    // Umwandeln in Kleinbuchstaben
    $element_name = strtolower($element_name);
    // Überprüfung des Elementnames
    if ($element_name=="daten") {
        $ausgabe .= "</p>";
    }
}



Das sind die Funktionen, die in diesem Beispiel benötigt werden. Nun muss die XML Datei eingelesen werden, und daraufhin der Parser erzeugt werden.



$xmlFile = file("daten.xml");
$parser = xml_parser_create();

xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "cdata");

foreach($xmlFile as $element) {
    xml_parse($parser, $element);
}

xml_parser_free($parser);
echo $ausgabe;



In der ersten Zeile wird die Datei über die file()-Funktion in ein Array gelesen. In der zweiten Zeile wird der Parser erzeugt. Darauf werden die einzelnen Handler festgelegt.

Der letzte und wichtigste Teil des Skripts ist, das der Inhalt des Arrays über eine foreach-Schleife einzeln über die Funktion xml_parse() geparsed wird.

In der vorletzten Zeile wird der Parser wieder entfernt, d.h. sämtliche belegten Resourcen werden wieder frei gegeben. In der letzten Zeile wird nun der Inhalt der Variablen $ausgabe ausgegeben. In ihr befindet sich der Inhalt, der über die einzelnen Funktionen "dynamisch" aus der XML Datei extrahiert wurde.


 


Eigenschaften der XML-Funktionen
 






© 2001-2005 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt
© 2005 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de