addAttribute()
Erfahren Sie, wie Sie mit SimpleXMLElement::addAttribute() Attribute zu XML-Elementen hinzufügen – inkl. Namespaces und häufiger Fallstricke.
Einführung
SimpleXML ist eine PHP-Erweiterung, die eine einfache und benutzerfreundliche API für die Arbeit mit XML-Dokumenten bereitstellt. Die Funktion SimpleXMLElement::addAttribute() ist eine der vielen Funktionen, die SimpleXML für die Arbeit mit XML-Dokumenten bietet. Sie ist ein leistungsstarkes Werkzeug, mit dem Attribute zu einem Element in einem XML-Dokument hinzugefügt werden können. In diesem Artikel besprechen wir die Funktion SimpleXMLElement::addAttribute() im Detail und erläutern, wie sie in PHP eingesetzt wird.
Syntax
addAttribute() ist eine Methode auf einem SimpleXMLElement-Objekt. Sie fügt dem Element, auf dem sie aufgerufen wird, ein Attribut hinzu und gibt nichts zurück (void):
public SimpleXMLElement::addAttribute(
string $name,
string $value = "",
?string $namespace = null
): void| Parameter | Erforderlich | Beschreibung |
|---|---|---|
$name | Ja | Der Name des hinzuzufügenden Attributs (z. B. id oder xml:lang). |
$value | Nein | Der Wert des Attributs. Standardmäßig ein leerer string. |
$namespace | Nein | Der Namespace-URI, zu dem das Attribut gehört. Weglassen für ein einfaches Attribut ohne Namespace. |
Da die Methode das Element direkt verändert, weist man das Ergebnis keiner Variablen zu — das neue Attribut erscheint nach dem Aufruf einfach am Element.
Einfaches Beispiel
Die häufigste Verwendung ist das Hinzufügen eines oder mehrerer Attribute zu einem gerade erstellten Element:
Hier wird ein <book>-Element erstellt, ein isbn-Attribut hinzugefügt und anschließend zwei untergeordnete Elemente eingefügt, bevor das Dokument mit asXML() wieder als string serialisiert wird. Die Ausgabe lautet:
<?xml version="1.0"?>
<book isbn="123456789"><title>PHP Basics</title><author>John Doe</author></book>Warum addAttribute() statt Array-Syntax verwenden?
SimpleXML erlaubt das Lesen von Attributen über die Array-Syntax — $element['isbn'] — und man kann darüber auch Werte schreiben. Warum gibt es also addAttribute()?
- Es ist der dokumentierte Weg zum Erstellen eines Attributs. Die Array-Schreibsyntax funktioniert zum Ändern eines bereits vorhandenen Werts, aber
addAttribute()macht das Hinzufügen eines neuen Attributs explizit deutlich. - Es unterstützt Namespaces. Die Array-Syntax kann keinem gesetzten Attribut einen Namespace zuweisen; der dritte Parameter von
addAttribute()ermöglicht dies.
<?php
$xml = new SimpleXMLElement('<book isbn="123456789"></book>');
// Update an existing attribute (array syntax is fine here):
$xml['isbn'] = '000000000';
// Add a brand-new attribute:
$xml->addAttribute('language', 'en');
echo $xml->asXML();Namespaced-Attribut hinzufügen
Wenn ein Dokument XML-Namespaces verwendet, übergeben Sie den Namespace-URI als drittes Argument. Der Attributname sollte das Präfix enthalten, an das er gebunden werden soll:
<?php
$xml = new SimpleXMLElement('<book></book>');
$xml->addAttribute('xml:lang', 'en', 'http://www.w3.org/XML/1998/namespace');
echo $xml->asXML();Dies erzeugt <book xml:lang="en"/>. Ohne das Namespace-Argument würde der : im Namen als literaler Bestandteil des Attributnamens behandelt und nicht als Namespace-Präfix.
Häufige Fallstricke
- Es überschreibt nicht. Wenn
addAttribute()mit einem bereits vorhandenen Namen aufgerufen wird, wird ein zweites Attribut mit diesem Namen hinzugefügt, was ungültiges XML erzeugt. Um einen vorhandenen Wert zu ändern, verwenden Sie stattdessen die Array-Schreibsyntax ($xml['isbn'] = '...'). - Sonderzeichen werden automatisch maskiert. Werte wie
Tom & Jerrywerden in der Ausgabe automatisch zuTom & Jerrykodiert, sodass Sie das Maskieren nicht selbst vornehmen müssen. - Reihenfolge ist bei Namespaces wichtig. Fügen Sie Namespace-Attribute hinzu, nachdem das Element existiert; ein Attribut kann nicht einem Namespace zugeordnet werden, wenn das Element nicht im Geltungsbereich dieses Namespace liegt, ohne ihn zu deklarieren.
<?php
$xml = new SimpleXMLElement('<book></book>');
$xml->addAttribute('isbn', '123 & 456');
echo $xml->asXML(); // <book isbn="123 & 456"/>Verwandte Funktionen
addChild()— ein untergeordnetes Element statt eines Attributs hinzufügen.asXML()— das SimpleXMLElement zurück in einen XML-string serialisieren.attributes()— die bereits vorhandenen Attribute eines Elements auslesen.
Fazit
SimpleXMLElement::addAttribute() ist der explizite, Namespace-fähige Weg zum Hinzufügen von Attributen beim Aufbau von XML mit SimpleXML. Verwenden Sie diese Methode beim Erstellen von Attributen (insbesondere bei Namespace-Attributen) und greifen Sie auf die Array-Schreibsyntax zurück, wenn Sie lediglich einen bereits vorhandenen Wert aktualisieren möchten. Beachten Sie, dass die Methode niemals überschreibt und Sonderzeichen automatisch maskiert.