Start · Sprachen · PHP · Referenz · xmlwriter_write_element_ns

xmlwriter_write_element_ns

Funktion

Schreibt ein vollständiges XML-Element mit Namensraum-Präfix und -URI in einem einzigen Schritt in den <code>XMLWriter</code>-Puffer.

seit PHP 5.1.2 Kategorie: xml

Signatur

xmlwriter_write_element_ns(XMLWriter $writer, ?string $prefix, string $name, ?string $namespace, ?string $content = null): bool

Beschreibung

xmlwriter_write_element_ns() ist die prozedurale Variante der Methode XMLWriter::writeElementNs() und erzeugt ein komplettes XML-Element inklusive öffnendem Tag, optionalem Textinhalt und schließendem Tag – alles mit Namensraum-Unterstützung. Das Element erhält dabei ein Präfix (z. B. soap) und eine zugehörige Namespace-URI (z. B. http://schemas.xmlsoap.org/soap/envelope/).

Die Funktion ist dann besonders nützlich, wenn ein einfaches Element ohne Kindelemente, aber mit Namespace-Deklaration erzeugt werden soll. Für komplexe Strukturen mit verschachtelten Kindelementen empfiehlt sich die Kombination aus xmlwriter_start_element_ns() und xmlwriter_end_element().

Wird null als $prefix übergeben, wird das Element ohne Präfix, aber mit einer Default-Namespace-Deklaration (xmlns="...") ausgegeben. Ist $content null oder leer, wird ein selbstschließendes Element erzeugt.

Die Funktion arbeitet mit dem übergebenen XMLWriter-Objekt und schreibt direkt in dessen internen Puffer; das Ergebnis kann anschließend mit xmlwriter_output_memory() oder xmlwriter_flush() abgerufen werden.

Parameter

Name Typ Default Beschreibung
$writer Pflicht XMLWriter Die XMLWriter-Instanz, in deren Puffer das Element geschrieben werden soll.
$prefix Pflicht ?string Das Namespace-Präfix des Elements (z. B. "soap"). Wird null übergeben, erhält das Element kein Präfix und der Namespace wird als Default-Namespace deklariert.
$name Pflicht string Der lokale Name des XML-Elements (ohne Präfix), z. B. "Body".
$namespace Pflicht ?string Die Namespace-URI, die dem Präfix zugeordnet wird, z. B. "http://schemas.xmlsoap.org/soap/envelope/". Wird null übergeben, wird keine xmlns-Deklaration hinzugefügt.
$content ?string null Der Textinhalt des Elements. Sonderzeichen werden automatisch als XML-Entities kodiert. Wird null übergeben, erzeugt die Funktion ein selbstschließendes Element.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. wenn der XMLWriter nicht korrekt initialisiert wurde).

Beispiele

Einfaches Element mit Namensraum schreiben

<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_set_indent_string($writer, '  ');

xmlwriter_start_document($writer, '1.0', 'UTF-8');

// Wurzelelement mit Namespace
xmlwriter_start_element_ns($writer, 'soap', 'Envelope', 'http://schemas.xmlsoap.org/soap/envelope/');

// Kindelement mit gleichem Namespace und Textinhalt
xmlwriter_write_element_ns(
    $writer,
    'soap',
    'Body',
    'http://schemas.xmlsoap.org/soap/envelope/',
    'Hello World'
);

xmlwriter_end_element($writer); // </soap:Envelope>
xmlwriter_end_document($writer);

echo xmlwriter_output_memory($writer);
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">Hello World</soap:Body> </soap:Envelope>

Selbstschließendes Element und Default-Namespace

<?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_ns($writer, 'atom', 'feed', 'http://www.w3.org/2005/Atom');

// Element mit Inhalt und Namespace
xmlwriter_write_element_ns(
    $writer,
    'atom',
    'title',
    'http://www.w3.org/2005/Atom',
    'Mein RSS-Feed <Test>'
);

// Selbstschließendes Element (kein Inhalt)
xmlwriter_write_element_ns(
    $writer,
    'atom',
    'updated',
    'http://www.w3.org/2005/Atom',
    null
);

xmlwriter_end_element($writer);
xmlwriter_end_document($writer);

echo xmlwriter_output_memory($writer);
<?xml version="1.0" encoding="UTF-8"?> <atom:feed xmlns:atom="http://www.w3.org/2005/Atom"> <atom:title xmlns:atom="http://www.w3.org/2005/Atom">Mein RSS-Feed &lt;Test&gt;</atom:title> <atom:updated xmlns:atom="http://www.w3.org/2005/Atom"/> </atom:feed>

// Wichtig · Fallstricke

Doppelte Namespace-Deklarationen: xmlwriter_write_element_ns() schreibt die xmlns-Deklaration direkt auf das erzeugte Element, auch wenn der Namespace bereits im Elternelement deklariert wurde. Um redundante Deklarationen zu vermeiden, kann stattdessen xmlwriter_start_element_ns() für das Wurzelelement und xmlwriter_write_element() (mit Präfix im Namen) für Kindelemente verwendet werden.

Sonderzeichen im Inhalt werden von der Funktion automatisch als XML-Entities kodiert (z. B. < wird zu &lt;), sodass kein manuelles Escaping notwendig ist.

Ab PHP 8.0 ist der erste Parameter ein typisiertes XMLWriter-Objekt; in PHP 7 und früher war es eine resource.