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



 

Erzeugung von dynamischen XML-Dokumenten mit DOM




Sie haben nun bereits erfahren, wie Sie manuell ein XML-Dokumente erzeugen können. Was nun noch fehlt ist die dynamische Generierung von XML-Dokumenten mit Hilfe von DOM.

Ein einzelnes Element wird als Knoten (Node) bezeichnet. Es gibt ein Dutzend verschiedene Typen von Knoten, aber die am häufigsten benutzten Typen sind Elemente, Attribute und Texte. Nehmen wir als Beispiel folgende Zeile:



<autor alter="29">Kannengiesser</autor>



Die DOMXML-Funktionen in PHP bezeichnen den Typ von autor als XML_ELEMENT_NODE, alter="29" wird auf einen XML_ATTRIBUTE_NODE abgebildert, und Kannengiesser ist ein XML_TEXT_NODE.

Die erneuerten DOMXML-Funktionen in PHP 4.3 folgen einem bestimmten Muster. Sie erzeugen ein Element entweder als Element oder als Textknoten und fügen alle gewünschten Attribute an die entsprechende Stelle innerhalb der XML-Struktur (Baum) hinzu.

Bevor Sie Elemente erzeugen können, müssen Sie erst einmal ein neues Dokument anlegen. Hierbei übergeben Sie als Argument die XML-Version.



$xmldok = domxml_new_doc('1.0');



Anschliessend erzeugen Sie die zum Dokument gehörenden Elemente.



$buch_element = $xmldok->create_element('buch');
$buch = $xmldok->append_child($buch_element);



Hier wir ein neues Element buch erzeugt und dem Objekt $buch_element zugeordnet. Um die Dokumentenwurzel zu erzeugen, sprich den Ursprung der XML-Struktur, hängen Sie $buch_element als Kind an das Dokument $xmldok an. Das Ergebnis, $buch, bezeichnet nun das spezielle Element und seine Position innerhalb des DOM-Objekts.

Sämtliche Knoten werden durch Methodenaufrufe des $xmldok erzeugt. Nachdem ein Knoten erzeugt wurde, kann dieser an jedes beliebige Element des Baums gehängt werden. Das Element, bei dem die Methode appen_child() aufgerufen wird, legt die Position im Baum fest, an der der Knoten angeordnet ist. Im vorliegenden Fall wurde $buch_element an $xmldok gehängt, dadurch wird es zum Top-Level-Knoten oder Wurzelknoten.

Sie können nun ein weitere Knoten an $buch hängen, diese werden als Kindknoten (childnodes) bezeichnet. Da $buch ein Kind von $xmldok ist, ist das neue Element gewissermaßen ein Enkel von $xmldok.


$titel_element = $xmldok->create_element('titel');
$titel = $buch->append_child($titel_element);



Durch den Aufruf von $buch->append_child() wird das Element $titel_element unter dem Element $buch angeordnet.

Um den Text innerhalb des Tags <titel></titel> einzufügen, erzeugen Sie mit create_text_node() einen Textknoten und hängen diesen an $titel.



$text_knoten = $xmldok->create_text_node('Flash MX 2004');
$titel->append_child($text_knoten);



Da $titel bereits zum Dokument hinzugefügt wurde, besteht keine Notwendigkeit, dieses Element erneut an $buch zu hängen.

Die Reihenfolge, in der Sie die Kindelemente an die Knoten hängen, spielt keine Rolle. Die folgenden vier Codezeilen, die den Textknoten erst an $titel_element und dann an $buch hängen, führen zum selben Ergebnis, wie die obigen Codezeilen.



$titel_element = $xmldok->create_element('titel');
$text_knoten = $xmldok->create_text_node('Flash MX 2004');

$titel_element->append_child($text_knoten);
$buch->append_child($titel_element);



Um ein Attribut hinzuzufügen, rufen Sie die Methode set_attribute() des Knotens auf und übergeben den Attributnamen und den Wert als Argumente.



$titel->set_attribute('cover', 'hard');



Wenn Sie das Titel-Element jetzt ausgeben, siehst es folgendermaßen aus:



<titel cover="hard">Flash MX 2004</titel>



Nun können Sie das Dokument als String ausgeben oder in einer Datei speichern.



// XML-Dokument als String ausgeben
$ausgabe = $xmldok->dump_mem(true);

// XML-Dokument in die Datei buch.xml schreiben
$xmldok->dump_file('buch.xml',false,true);



Der einzige Parameter, den dump_mem() annimmt, ist ein optionaler Boolescher Wert. Ein leerer Wert oder false führen dazu, das der String als lange Zeile ausgegeben wird. Der Wert true führt dazu, dass der XML-Code wie hier ordentlich formatiert wird:



<?xml version="1.0"?>
<buch>
  <titel cover="hard">Flash MX 2004 Praxisbuch</titel>
</buch>



Der Methode dump_file() können Sie bis zu drei Werte übergeben. Der erste ist notwendig und bezeichnet den Dateinamen. Der zweite legt fest, ob die Datei mit gzip-komprimiert werden soll. Der letzte Wert ist die identisch mit der Option für eine ordentliche Formatierung wie bei dump_mem().

Abschliessend noch ein vollständiges Beispiel, welches sich auf die DOMXML-Funktionen stützt.


Beispiel



<?php
header
('Content-Type: text/xml');
// XML-Dokument erzeugen
$xmldok = domxml_new_doc('1.0');

// Wurzel-Element erzeugen <buch> und dem XML-Dokument
// hinzufügen
$buch = $xmldok->append_child($xmldok->create_element('buch'));

// Titel-Element erzeugen <title> und dem Wurzel-Element
// hinzufügen
$titel = $buch->append_child($xmldok->create_element('titel'));

// Text für Titel-Element erzeugen und zuweisen
$titel->append_child($xmldok->create_text_node('Flash MX 2004 Praxisbuch'));

// Attribut für das Titel-Element erzeugen
// Attribut: cover
$titel->set_attribute('cover', 'hard');

// Autor-Element erzeugen <autor> und dem Wurzel-Element
// hinzufügen
$matthias = $buch->append_child($xmldok->create_element('autor'));

// Text für Autor-Element erzeugen und zuweisen
$matthias->append_child($xmldok->create_text_node('Matthias Kannengiesser'));

// Ein weiteres Autor-Element erzeugen und dem Wurzel-Element
// hinzufügen
$caroline = $buch->append_child($xmldok->create_element('autor'));

// Text für zweites Autor-Element erzeugen und zuweisen
$caroline->append_child($xmldok->create_text_node('Caroline Kannengiesser'));

// Formatierte Ausgabe des DOM basiertes XML-Dokument
echo $xmldok->dump_mem(true);
?>




Ausgabe



<?xml version="1.0"?>
<buch>
  <titel cover="hard">Flash MX 2004 Praxisbuch</titel>
  <autor>Matthias Kannengiesser</autor>
  <autor>Caroline Kannengiesser</autor>
</buch>



Hinweis: Möglicherweise vorkommende Entities müssen beim Einsatz der DOMXML-Funktionen nicht manuell in Escape-Sequenzen umgewandelt werden. Diese Aufgabe übernehmen die DOMXML-Funktionen!


Da das Thema XML noch sehr viele experimentelle Bestandteile enthält, haben wir dieses Thema lediglich angeschnitten. Wir können Ihnen jedoch jetzt bereits versichern, dass XML in Verbindung mit PHP auch in Zukunft eine immer grössere Rolle spielen wird und Einfluss auf eine Vielzahl von Web-Anwendungen haben wird.


 


Manuelle Erzeugung von XML-Dokumenten
 






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