Start · Sprachen · PHP · Referenz · xmlwriter_start_attribute_ns

xmlwriter_start_attribute_ns

Funktion

Beginnt ein Namespace-qualifiziertes Attribut im aktuellen XML-Element des <code>XMLWriter</code>-Streams.

seit PHP 5.1.2 Kategorie: xml

Signatur

xmlwriter_start_attribute_ns(XMLWriter $writer, string $prefix, string $name, ?string $namespace): bool

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

Typ
bool
Beschreibung
Gibt 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);
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xsi:type="xsd:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>

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);
<?xml version="1.0" encoding="UTF-8"?> <app:root xmlns:app="http://example.com/ns"> <app:item app:id="42">Beispielinhalt</app:item> </app:root>

// 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.