-
PHP - Teil 38 - XML (Teil 3): Dokumente mit XMLWriter erstellen
12.01.2012 in PHP von daniel_koch
- Zum Downloadmanager hinzufügen
- PDF-Datei herunterladen
- Arbeitsmaterialien herunterladen
- Video
- Kommentare ansehen (1)
- Kategorie: PHP
- Erstellt mit Programmversion: PHP 5/6
- Kompatibel ab Programmversion: PHP 5
- Dateigröße (PDF): 1.1 MB
- Dateigröße (Arbeitsmaterial): 3 KB
- Bisherige Zugriffe: 81
Zum Downloadmanager hinzufügen PDF-Datei herunterladen (1.1 MB) Arbeitsmaterialien herunterladen (3 KB) Zugehöriges Video-Training ansehen
Tipp: Dieser Inhalt befindet sich auch auf der:
Lieber Gast …
… die Inhalte von PSD-Tutorials.de stehen nur registrierten Mitgliedern zur Verfügung. Damit wollen wir den Communitygedanken weiterführen. Als Mitglied trägst du - wenn auch nur im Kleinen - zum Puls der Community bei. Und nur so ist es möglich, weiterhin hochwertige Inhalte für alle bereitzustellen.
Vorteile der kostenlosen Mitgliedschaft
Mit der kostenlosen und schnell erledigten Registrierung erhältst du viele nachhaltige Vorteile, die wir dir hier in aller Kürze aufzeigen möchten:
- PSD steht für professionelles Know-how in den Bereichen Bildbearbeitung mit Photoshop, Fotografie, Webentwicklung, Layout- und Vektorbearbeitung, 3D-Bearbeitung mit Cinema 4D und Co.
- Über 3.000 Tutorials mit druckbarer PDF-Datei und teilweise den zugehörigen Arbeitsmaterialien
- Mehr als 1.900 Video-Trainings als Stream zur Direktanzeige und zum Download
- Abruf von über 2.200 Downloads zu Photoshop-Presets, 3D-Modellen, Grußkarten, Texturen & Co
- Zugriff auf ein sehr aktives Forum mit Antworten im Minutentakt
- Deine Daten sind sicher. Sie werden nicht weitergegeben! Die Mitgliedschaft kann jederzeit und ohne Aufwand wieder gelöscht werden.
-
Registriere dich bei uns und du erhältst die Selection-DVD mit über 24 Stunden Video-Trainings zu Photoshop, InDesign uvm. als Download gratis (sofern Newsletter aktiviert).
Reinschnuppern als Gast
Niemand kauft gerne die Katze im Sack, auch wenn sie kostenlos ist. Wir haben eine Handvoll Tutorials und Video-Trainings ausgesucht, die du auch als Gast ohne Registrierung ansehen kannst. Gefallen sie dir, stehen dir nach der Registrierung alle oben genannten Inhalte zur Verfügung.
- Download: Sepia-Vintage-Effekt-Aktion
- Download: Screenguide-Magazin als PDF zum Download
- Download: Spiegelungen 2
- Download: Vektor-Logo (Eidechse)
- Tutorial: Ballons aus einer Schublade
- Tutorial: Neue Pinsel erstellen leicht gemacht
- Tutorial: Kommerzielle Fotografie 01: Berufswunsch Fotografie
- Tutorial: Linien zum Glühen bringen
- Videotraining: Lichtscheinkontureneffekt mit Animation
- Videotraining: CorelDRAW X6 Grundlagen - Hilfsmittel Freihand, 2-Punkt-Linie, Bezier, B-Spline, Polylinie, Stift, 3-Punkt-Kurve
- Videotraining: CorelDRAW X6 Grundlagen: Hilfsmittel Form - Heranziehen, Zurückweisen
- Videotraining: Die Programmoberfläche und der Arbeitsbereich von Adobe InDesign
PHP-Workshop-DVD - Basics & Tricks
- 12 Stunden Video-Training, 480 PDF-Seiten Tutorials
- Basics, Formulare, Datenbanken, XML und Co.
- 4 Stunden Bonusmaterial zum Webdesign (mit Photoshop
Kommentare
Anleitung (Bilder + Extras werden nur für Mitglieder eingeblendet)
phpinfo() überprüft werden.
Im Ausgabefenster gibt es den Bereich xmlwriter. Sollte jemand PHP selbst kompilieren und XMLWriter nicht mit installieren wollen, muss einfach --disable-xmlwriter angegeben werden.
Ein erstes Beispiel soll zeigen, wie sich XMLWriter nutzen lässt. Zunächst die verwendete Syntax:
<?php
$mem = xmlwriter_open_memory();
if (false == $mem) {
die ("Der Speicher konnte nicht freigegeben werden.");
}
xmlwriter_start_document($mem,"1.1");
xmlwriter_write_element($mem,"content","Hallo, Welt!");
xmlwriter_end_document($mem);
$xml_data=xmlwriter_output_memory($mem);
file_put_contents("ausgabe.xml",$xml_data);
?>
Ruft man diese Datei im Browser auf, wird eine leere Seite angezeigt. Das Entscheidende passiert hier tatsächlich im Hintergrund. Denn durch das Aufrufen der Datei wird automatisch die Datei ausgabe.xml erzeugt. Öffnet man diese im Browser, ergibt sich folgendes Bild:

<?xml version="1.1"?> <content>Hallo, Welt!</content>
Und jetzt ein Blick auf die Bestandteile der PHP-Syntax.
$mem = xmlwriter_open_memory();
Durch diese Zeile wird ein neuer XMLWriter erzeugt. Erst dadurch können Zeichenketten (im Endeffekt also die XML-Syntax) in den Speicher geschrieben werden. Ob der Speicher tatsächlich freigegeben wurde und somit das Dokument angelegt werden kann, wird über eine einfache
if-Abfrage überprüft.
if (false == $mem) {
die ("Der Speicher konnte nicht freigegeben werden.");
}
Jetzt kann mit dem Anlegen des Dokuments begonnen werden. Dabei muss als erste Funktion immer
xmlwriter_start_document() angegeben werden.xmlwriter_start_document($mem,"1.1");
Über
xmlwriter_start_document() wird die XML-Deklaration beschrieben.<?xml version="1.1"?>
Dabei stehen verschiedene Parameter zur Auswahl, über die sich diese Deklaration gestalten lässt. Im vorherigen Beispiel wurden zwei Parameter verwendet. Der erste Parameter enthält die XMLWriter-Ressource. Über den zweiten Parameter wird die Versionsnummer des XML-Dokuments bestimmt. Momentan sind dabei nur die Werte
1.0 (das ist Standard) und 1.1 möglich bzw. sinnvoll.Die Kodierung des Dokuments lässt sich über den dritten Paramater bestimmen. Typische Werte können hier
UTF-8 und ISO-8859-1 sein. Zu guter Letzt kann man noch festlegen, ob die DTD innerhalb oder außerhalb des XML-Dokuments steht bzw. ob das Dokument überhaupt eine DTD besitzt. Mögliche Werte sind yes und no.<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
Jetzt geht es mit der Definition der eigentlichen Elemente los. Um ein Element zu definieren, wird die Funktion
xmlwriter_write_element() verwendet.xmlwriter_write_element($mem,"content","Hallo, Welt!");Auch hier können einige Parameter angegeben werden. Der erste Parameter entspricht der XMLWriter-Ressource. Parameter zwei ist der Name des Elements. Über den dritten Parameter legt man den Inhalt des Elements fest. Die gezeigte Syntax führt zu folgender Ausgabe:
<content>Hallo, Welt!</content>
XMLWriter sorgt also automatisch dafür, dass das Element richtig geschlossen wird.
Da das Dokument am Anfang über die Funktion
xmlwriter_start_document() explizit gestartet wurde, muss es auch wieder geschlossen werden. Verwendet wird dafür die Funktion xmlwriter_end_document().xmlwriter_end_document($mem);
Nun wird das Schreiben der Syntax in ein Dokument vorbereitet. Dafür muss man sich zunächst den aktuellen Puffer zurückliefern lassen und diesen innerhalb einer Variablen speichern.
$xml_data=xmlwriter_output_memory($mem);
Um aus der XML-Syntax direkt ein XML-Dokument zu generieren, wird
file_put_contents() verwendet.
file_put_contents('ausgabe.xml',$xml_data);
Dieser Funktion übergibt man als Parameter den gewünschten Dateinamen und den Inhalt, der letztendlich dem zuvor in der Variablen
$xml_data gespeicherten Puffer entspricht.Elemente verschachteln
Im vorherigen Beispiel wurde ein einfaches Dokument erstellt, in dem lediglich ein Element enthalten gewesen ist. Solche Dokumente kommen in der Praxis allerdings eher selten vor. Meistens benötigt man Elemente, die wiederum Elemente enthalten. Ein typisches Beispiel dafür könnte folgendermaßen aussehen:<?xml version="1.1"?> <katalog> <titel>Fever Pitch</titel> <autor>Hornby, Nick</autor> </katalog>
In diesem Fall besitzt
katalog die beiden Unterelemente titel und autor. Um ein Element zu öffnen, das erst später wieder geschlossen wird, wird die Funktion xmlwriter_start_element() verwendet. Dieser Funktion übergibt man die XML-Ressource und den Elementnamen. Im aktuellen Beispiel wird darüber das Element katalog generiert. Ein über xmlwriter_start_element() geöffnetes Element sollte immer explizit geschlossen werden. Dafür gibt es die Funktion xmlwriter_end_element(). Insgesamt sieht die Definition des katalog-Elements also folgendermaßen aus:xmlwriter_start_element($mem,"katalog"); xmlwriter_end_element($mem);
In dieses Element sollen nun wiederum zwei weitere Elemente eingefügt werden. Eingesetzt wird dafür die Funktion
xmlwriter_write_element(), die bereits vorgestellt wurde. Diese Funktion wird im aktuellen Beispiel zwischen xmlwriter_start_element() und xmlwriter_end_element() eingesetzt.xmlwriter_start_element($mem,"katalog"); xmlwriter_write_element($mem,"titel","Fever Pitch"); xmlwriter_write_element($mem,"autor","Hornby, Nick"); xmlwriter_end_element($mem);
<?php
$mem = xmlwriter_open_memory();
if (false == $mem) {
die ("Der Speicher konnte nicht freigegeben werden.");
}
xmlwriter_start_document($mem,"1.1");
xmlwriter_start_element($mem,"katalog");
xmlwriter_write_element($mem,"titel","Fever Pitch");
xmlwriter_write_element($mem,"autor","Hornby, Nick");
xmlwriter_end_document($mem);
$xml_data=xmlwriter_output_memory($mem);
file_put_contents("katalog.xml",$xml_data);
?>
Die Ausgabe im Browser, wenn dort das Dokument katalog.xml geöffnet wird, stellt sich folgendermaßen dar:

Attribute einfügen
Bislang wurden lediglich "normale" Elemente angelegt. Was momentan noch fehlt, sind die Attribute. Diese lassen sich denkbar einfach einfügen. XMLWriter stellt dafür die Funktionxmlwriter_write_attribute() zur Verfügung. Werft zunächst einen Blick auf das Ergebnis:
Dem Element
buch wurde das Attribut isbn mit einer Nummer als Wert zugewiesen. Die XML-Syntax sieht folgendermaßen aus:<?xml version="1.1"?> <katalog> <buch isbn="132342340"> <titel>Fever Pitch</titel> <autor>Hornby, Nick</autor> </buch> </katalog>
Attribute lassen sich über die Funktion
xmlwriter_write_attribute() einfügen. Dieser Funktion übergibt man die XML-Ressource, den Attributnamen und den Wert des Attributs.
<?php
$mem = xmlwriter_open_memory();
if (false == $mem) {
die ("Der Speicher konnte nicht freigegeben werden.");
}
xmlwriter_start_document($mem,"1.1");
xmlwriter_start_element($mem,"katalog");
xmlwriter_start_element($mem,"buch");
xmlwriter_write_attribute($mem, "isbn", "132342340");
xmlwriter_write_element($mem,"titel","Fever Pitch");
xmlwriter_write_element($mem,"autor","Hornby, Nick"); xmlwriter_end_element($mem); xmlwriter_end_element($mem); xmlwriter_end_document($mem); $xml_data=xmlwriter_output_memory($mem); file_put_contents('attribute.xml',$xml_data); ?>
Kommentare einfügen
Der Übersichtlichkeit halber sollten in die XML-Dokumente – natürlich immer in Abhängigkeit von deren Umfang – Kommentare eingefügt werden. Dafür gibt es die Funktionxmlwriter_write_comment(). Zunächst ein Blick darauf, wie ein solcher Kommentar im XML-Dokument überhaupt aussieht.<?xml version="1.1"?> <katalog> <buch> <!--Das ist das erste Buch-Element--> <titel>Fever Pitch</titel> <autor>Hornby, Nick</autor> </buch> </katalog>
Eingeleitet werden die Kommentare also über die Zeichenkette
<!--. Beendet werden sie mit -->.xmlwriter_write_comment($mem,"Das ist das erste Buch-Element"); xmlwriter_write_attribute($mem, "isbn", "132342340"); xmlwriter_write_element($mem,"titel","Fever Pitch");
xmlwriter_write_comment() schreibt einen vollständigen Kommentar ins Dokument.
Nun kann es aber natürlich sein, dass ihr beispielsweise ganze Elemente auskommentieren wollt.
<?xml version="1.1"?> <katalog> <buch> <!--<titel>Fever Pitch</titel>--> <autor>Hornby, Nick</autor> </buch> </katalog>
titel ignoriert. Umsetzen lässt sich so etwas über die beiden Funktionen xmlwriter_start_comment() und xmlwriter_end_comment().xmlwriter_start_comment($mem); xmlwriter_write_attribute($mem, "isbn", "132342340"); xmlwriter_write_element($mem,"titel","Fever Pitch"); xmlwriter_end_comment($mem);
Auf diese Weise lassen sich ganze Passagen des XML-Dokuments bei Bedarf auskommentieren.

-
Reklame
-
-
- 360° Panorama zu groß für jpg?
- Titel Schriftart
- Vorstellung für eure Vorstellung
- Original RAW-Datein in DNG einbetten oder nicht???
- Objekt größer und kleiner, Textur???
- Allgemeine Fragen zur eigenen Website
- Welches Blitzlichtgerät soll es sein?
- Textur größe anpassen
- Wacom an zwei Monitoren
- Maske bearbeiten
- InDesign - Datenzusammenführung auf zwei Seiten
- Starthilfe für Fotoneuling
- Was meint ihr?
- Oberfläche eindrücken
- Probleme mit Bevel
- Dropdown-Felder funktionieren nicht
- [WIP] - Ron21rn - Showroom
- Produktfotografie - besser Dauerlicht oder Blitz?
- Lightroom 4 - PC und MacBook
- R14: Body Tags fehlen...
-
-
Aktuelles Commag
Anzeige
-
Anzeige


tampen
30.10.2012 - 14:48
auch dieser Teil gut gemacht...