Signatur
Beschreibung
xmlwriter_start_attribute_ns() öffnet ein Attribut mit Namespace-Präfix im aktuell geöffneten XML-Element. Nach dem Aufruf muss der Attributwert per xmlwriter_text() oder einer vergleichbaren Funktion gesetzt und das Attribut mit xmlwriter_end_attribute() geschlossen werden.
Die Funktion ist dann sinnvoll, wenn XML-Dokumente erzeugt werden, die mehrere Namensräume verwenden – etwa SOAP-Envelopes, XHTML mit speziellen Erweiterungen oder beliebige XML-Formate mit Namespace-Konventionen. Das erzeugte Attribut erhält die Form prefix:name sowie bei Bedarf eine automatische xmlns:prefix-Deklaration.
Der prozedurale Stil der Funktion erwartet als erstes Argument das XMLWriter-Objekt (seit PHP 8.0 ist dies ein echtes XMLWriter-Objekt; früher war es eine Ressource). Die objektorientierte Entsprechung lautet XMLWriter::startAttributeNs().
Wichtig: Für einfache Attribute ohne Namespace genügt xmlwriter_start_attribute(). Der Namespace-URI kann null sein, wenn das Präfix bereits in einem umgebenden Element deklariert wurde und nicht erneut deklariert werden soll.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $writer Pflicht | XMLWriter | Das aktive XMLWriter-Objekt, das zuvor mit xmlwriter_open_memory() oder xmlwriter_open_uri() erstellt wurde. |
|
| $prefix Pflicht | string | Das Namespace-Präfix des Attributs, z. B. 'xsi' oder 'soap'. Erzeugt die Ausgabe prefix:name. |
|
| $name Pflicht | string | Der lokale Name des Attributs, z. B. 'type' oder 'lang'. |
|
| $namespace Pflicht | ?string | Der Namespace-URI, der dem Präfix zugeordnet wird, z. B. 'http://www.w3.org/2001/XMLSchema-instance'. null, wenn das Präfix bereits deklariert ist und keine erneute Deklaration gewünscht wird. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn kein Element geöffnet ist oder der Writer nicht initialisiert wurde).Beispiele
XSI-Typ-Attribut mit Namespace setzen
<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_start_document($writer, '1.0', 'UTF-8');
xmlwriter_start_element_ns($writer, 'soap', 'Envelope', 'http://schemas.xmlsoap.org/soap/envelope/');
// Namespace-qualifiziertes Attribut schreiben
xmlwriter_start_attribute_ns(
$writer,
'xsi',
'type',
'http://www.w3.org/2001/XMLSchema-instance'
);
xmlwriter_text($writer, 'xsd:string');
xmlwriter_end_attribute($writer);
xmlwriter_end_element($writer);
xmlwriter_end_document($writer);
echo xmlwriter_output_memory($writer);
Namespace-Attribut mit null-URI (Präfix bereits bekannt)
<?php
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_start_document($writer, '1.0', 'UTF-8');
// Wurzelelement mit Namespace-Deklaration
xmlwriter_start_element_ns($writer, 'app', 'root', 'http://example.com/ns');
// Kind-Element – Präfix 'app' ist bereits bekannt, URI = null
xmlwriter_start_element_ns($writer, 'app', 'item', null);
xmlwriter_start_attribute_ns($writer, 'app', 'id', null);
xmlwriter_text($writer, '42');
xmlwriter_end_attribute($writer);
xmlwriter_text($writer, 'Beispielinhalt');
xmlwriter_end_element($writer);
xmlwriter_end_element($writer);
xmlwriter_end_document($writer);
echo xmlwriter_output_memory($writer);
// Wichtig · Fallstricke
Reihenfolge beachten: Das Attribut muss vollständig (d. h. Text + xmlwriter_end_attribute()) abgeschlossen werden, bevor ein weiteres Attribut oder Kindelement geöffnet wird – sonst schlägt der Writer fehl.
PHP 8.0: Der erste Parameter ist nun vom Typ XMLWriter (Objekt) statt einer Ressource. Bestehender Code, der mit Ressourcen arbeitet, muss ggf. angepasst werden.
Die objektorientierte Variante $writer->startAttributeNs($prefix, $name, $namespace) ist in modernem Code bevorzugt, da sie weniger Parameter-Redundanz aufweist.