Signatur
Beschreibung
xmlwriter_start_element() öffnet ein neues XML-Element-Tag mit dem übergebenen Element-Namen. Das Element bleibt offen, bis es explizit mit xmlwriter_end_element() geschlossen wird. Zwischen Öffnen und Schließen können Attribute, Text-Inhalte oder weitere verschachtelte Elemente hinzugefügt werden.
Die Funktion gehört zur prozeduralen Schnittstelle des XMLWriter-Erweiterung. Die objektorientierte Entsprechung lautet XMLWriter::startElement(). Beide Varianten produzieren identische Ausgaben und sind vollständig gleichwertig.
Typische Einsatzgebiete sind die Erzeugung von RSS-Feeds, SOAP-Nachrichten, SVG-Dateien oder beliebigen XML-Dokumenten, bei denen eine präzise Kontrolle über die Ausgabe-Struktur erforderlich ist. Im Gegensatz zu xmlwriter_write_element() erlaubt xmlwriter_start_element() das Hinzufügen von Attributen und komplexen Kindelementen vor dem Schließen.
Der Element-Name muss ein gültiger XML-Name sein (kein Leerzeichen, keine Sonderzeichen als Erstes Zeichen). Für Elemente mit Namespace-Präfix steht xmlwriter_start_element_ns() zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $writer Pflicht | XMLWriter | Die XMLWriter-Instanz, die durch xmlwriter_open_memory() oder xmlwriter_open_uri() erzeugt wurde. |
|
| $name Pflicht | string | Der Name des zu öffnenden XML-Elements. Muss ein gültiger XML-Elementname sein, z. B. item oder rss:channel. |
Rückgabewert
true bei Erfolg zurück, false wenn der Element-Name ungültig ist oder ein interner Fehler auftritt.Beispiele
Einfaches XML-Dokument mit verschachtelten Elementen
<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_set_indent_string($writer, ' ');
xmlwriter_start_document($writer, '1.0', 'UTF-8');
xmlwriter_start_element($writer, 'catalog');
xmlwriter_start_element($writer, 'book');
xmlwriter_write_attribute($writer, 'id', 'bk101');
xmlwriter_start_element($writer, 'title');
xmlwriter_text($writer, 'PHP 8 Praxis');
xmlwriter_end_element($writer); // </title>
xmlwriter_start_element($writer, 'price');
xmlwriter_text($writer, '29.99');
xmlwriter_end_element($writer); // </price>
xmlwriter_end_element($writer); // </book>
xmlwriter_end_element($writer); // </catalog>
xmlwriter_end_document($writer);
echo xmlwriter_output_memory($writer);
Einfachen RSS-Feed erzeugen
<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_set_indent_string($writer, ' ');
xmlwriter_start_document($writer, '1.0', 'UTF-8');
xmlwriter_start_element($writer, 'rss');
xmlwriter_write_attribute($writer, 'version', '2.0');
xmlwriter_start_element($writer, 'channel');
xmlwriter_start_element($writer, 'title');
xmlwriter_text($writer, 'Mein Blog');
xmlwriter_end_element($writer);
xmlwriter_start_element($writer, 'link');
xmlwriter_text($writer, 'https://example.com');
xmlwriter_end_element($writer);
// Ein Beitrag
xmlwriter_start_element($writer, 'item');
xmlwriter_start_element($writer, 'title');
xmlwriter_text($writer, 'Erster Beitrag');
xmlwriter_end_element($writer);
xmlwriter_end_element($writer); // </item>
xmlwriter_end_element($writer); // </channel>
xmlwriter_end_element($writer); // </rss>
xmlwriter_end_document($writer);
header('Content-Type: application/rss+xml; charset=UTF-8');
echo xmlwriter_output_memory($writer);
// Wichtig · Fallstricke
Offene Elemente schließen: Jeder Aufruf von xmlwriter_start_element() muss durch einen korrespondierenden Aufruf von xmlwriter_end_element() abgeschlossen werden, sonst entsteht ungültiges XML. Alternativ kann xmlwriter_full_end_element() verwendet werden, das immer einen expliziten schließenden Tag (</tag> statt />) erzeugt.
Namespace-Unterstützung: Soll das Element einem XML-Namespace angehören, muss xmlwriter_start_element_ns() verwendet werden, da xmlwriter_start_element() keine Namespace-URI verarbeitet.
Kurzschreibweise: Wenn das Element ausschließlich einfachen Text enthält und keine Attribute benötigt, ist xmlwriter_write_element() kompakter und erfordert kein manuelles Schließen.