W3docs

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
ParameterErforderlichBeschreibung
$nameJaDer Name des hinzuzufügenden Attributs (z. B. id oder xml:lang).
$valueNeinDer Wert des Attributs. Standardmäßig ein leerer string.
$namespaceNeinDer 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:

php— editable, runs on the server

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 & Jerry werden in der Ausgabe automatisch zu Tom &amp; Jerry kodiert, 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 &amp; 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.

Übungen

Übung
Was macht die addAttribute-Funktion in PHP?
Was macht die addAttribute-Funktion in PHP?
Was this page helpful?