attributes()
XML-Attribute mit PHP SimpleXML lesen, iterieren, ändern, hinzufügen und entfernen — inkl. der Methode attributes() und Namespace-Attributen.
Einführung
In XML ist ein Attribut ein Name/Wert-Paar, das am öffnenden Tag eines Elements steht, etwa isbn in <book isbn="123456789">. PHP SimpleXML stellt diese Attribute über eine kleine, array-ähnliche API bereit, sodass Sie sie lesen, ändern, hinzufügen und entfernen können, ohne das XML manuell zu parsen.
Diese Seite behandelt vier alltägliche Aufgaben — das Lesen eines einzelnen Attributs, das Iterieren über alle Attribute mit attributes(), das Ändern von Werten sowie das Hinzufügen neuer Attribute — und zwei häufige Stolpersteine: Typ-Casting und Namespace-Attribute.
Ein einzelnes Attribut lesen
Behandeln Sie das Element wie ein array und greifen Sie über den Attributnamen darauf zu:
Es gibt einen häufigen Fallstrick: $xml['isbn'] ist kein gewöhnlicher string — es ist ein SimpleXMLElement. Es wird problemlos ausgegeben, weil es automatisch konvertiert wird. Wenn Sie es jedoch strikt vergleichen (===) oder für später speichern, sollten Sie es zuerst casten:
<?php
$xml = new SimpleXMLElement('<book isbn="123456789"></book>');
$isbn = (string) $xml['isbn']; // cast to a real string
var_dump($isbn === '123456789');
// bool(true)Prüfen Sie mit isset(), ob ein Attribut vorhanden ist, bevor Sie es lesen:
<?php
$xml = new SimpleXMLElement('<book isbn="123456789"></book>');
echo isset($xml['isbn']) ? "has isbn\n" : "no isbn\n";
echo isset($xml['lang']) ? "has lang\n" : "no lang\n";
// has isbn
// no langAlle Attribute mit attributes() auflisten
Wenn Sie die Attributnamen nicht im Voraus kennen, rufen Sie die Methode attributes() auf. Sie gibt ein SimpleXMLElement zurück, über das Sie iterieren können, wobei der Attributname der Schlüssel und dessen Wert der entsprechende Wert ist:
<?php
$xml = new SimpleXMLElement('<book isbn="123456789" lang="en"><title>PHP Basics</title></book>');
foreach ($xml->attributes() as $name => $value) {
echo "$name = $value\n";
}
// isbn = 123456789
// lang = enDa das Ergebnis zählbar ist, können Sie auch die Anzahl der Attribute ermitteln:
<?php
$xml = new SimpleXMLElement('<book isbn="123456789" lang="en"></book>');
echo count($xml->attributes());
// 2Attributwerte ändern
Um ein Attribut zu ändern, weisen Sie ihm über die array-Syntax einen neuen Wert zu und serialisieren Sie anschließend mit asXML():
Attribute hinzufügen
Ein neues Element aus simplexml_load_string() oder new SimpleXMLElement() besitzt möglicherweise nicht das Attribut, das Sie benötigen. Fügen Sie es mit addAttribute() hinzu, indem Sie Name und Wert übergeben:
Beachten Sie, dass eine Zuweisung an ein noch nicht vorhandenes Attribut ($xml['isbn'] = '...') dieses ebenfalls anlegt — addAttribute() ist jedoch die einzige Möglichkeit, ein namespace-qualifiziertes Attribut hinzuzufügen.
Ein Attribut entfernen
Es gibt keine dedizierte „Entfernen"-Methode. Heben Sie das Attribut mit unset() auf:
<?php
$xml = new SimpleXMLElement('<book isbn="123456789" lang="en"></book>');
unset($xml['lang']);
echo $xml->asXML();
// <?xml version="1.0"?>
// <book isbn="123456789"/>Namespace-Attribute
Attribute, die zu einem XML-Namespace gehören (zum Beispiel meta:rating), werden bei einem einfachen attributes()-Aufruf ohne Argumente nicht angezeigt. Übergeben Sie die Namespace-URI, um sie auszulesen:
<?php
$xml = new SimpleXMLElement(
'<book xmlns:meta="http://example.com/meta" meta:rating="5"><title>PHP Basics</title></book>'
);
foreach ($xml->attributes('http://example.com/meta') as $name => $value) {
echo "$name = $value\n";
}
// rating = 5Zusammenfassung
- Ein einzelnes Attribut lesen Sie mit der array-Syntax:
$xml['isbn']. Casten Sie es zu(string)für strikte Vergleiche. - Alle Attribute iterieren Sie mit
attributes(); das Ergebnis ist iterierbar und zählbar. - Weisen Sie einen neuen Wert zu, um ein Attribut zu ändern, nutzen Sie
addAttribute()zum Hinzufügen undunset()zum Entfernen. - Übergeben Sie eine Namespace-URI an
attributes(), um auf Namespace-Attribute zuzugreifen.
Weiterführende Informationen finden Sie unter SimpleXML-Übersicht, simplexml_load_string() und XML parsen mit SimpleXML.