Signatur
Beschreibung
Dom\Attr ist Teil des modernen, in PHP 8.4 eingeführten Dom\-Namespaces, der das veraltete DOMAttr-API ersetzt und vollständig mit den WHATWG-DOM-Spezifikationen konform ist. Ein Dom\Attr-Objekt repräsentiert ein einzelnes XML- oder HTML-Attribut eines Dom\Element-Knotens, beispielsweise id="main" oder class="container".
Attribute werden in der Regel nicht direkt instanziiert, sondern über Methoden wie Dom\Element::getAttributeNode(), Dom\Element::getAttributeNodeNS() oder durch Iteration über Dom\Element::$attributes (ein Dom\NamedNodeMap) abgerufen. Das Objekt stellt Name, Wert, Namespace-URI und zugehöriges Element des Attributs bereit.
Im Vergleich zur älteren DOMAttr-Klasse bietet Dom\Attr typsichere, readonly-Eigenschaften und eine vollständig spezifikationskonforme Implementierung. Die Klasse eignet sich besonders für die präzise Manipulation von XML-Dokumenten, für Namespace-bewusstes Parsen sowie überall dort, wo Attributknoten selbst – statt nur deren Werte – benötigt werden.
- $name (readonly string): Qualifizierter Name des Attributs (mit Präfix, z. B.
xml:lang). - $localName (readonly string): Lokaler Name ohne Präfix.
- $namespaceURI (readonly string|null): Namespace-URI oder
null. - $prefix (readonly string|null): Namespace-Präfix oder
null. - $value (string): Aktueller Attributwert – les- und schreibbar.
- $ownerElement (readonly Dom\Element|null): Das zugehörige Element oder
null. - $specified (readonly bool): Immer
truefür vorhandene Attribute (DOM-Level-2-Kompatibilität).
Beispiele
Attributknoten lesen und Wert ändern
<?php
$dom = Dom\HTMLDocument::createFromString('<p id="intro" class="lead">Hallo Welt</p>');
$p = $dom->querySelector('p');
// Attributknoten über getAttributeNode() abrufen
$attrNode = $p->getAttributeNode('id');
if ($attrNode instanceof Dom\Attr) {
echo 'Name: ' . $attrNode->name . PHP_EOL; // id
echo 'Wert: ' . $attrNode->value . PHP_EOL; // intro
echo 'Owner: ' . $attrNode->ownerElement->tagName . PHP_EOL; // P
// Wert ändern
$attrNode->value = 'hauptabsatz';
echo 'Neuer Wert: ' . $p->getAttribute('id') . PHP_EOL; // hauptabsatz
}
Alle Attribute eines Elements iterieren
<?php
$xml = Dom\XMLDocument::createFromString(
'<?xml version="1.0"?><root xmlns:dc="http://purl.org/dc/elements/1.1/" dc:title="Test" lang="de"/>'
);
$root = $xml->documentElement;
foreach ($root->attributes as $attr) {
/** @var Dom\Attr $attr */
printf(
"Attr: %-20s | Wert: %-10s | NS: %s\n",
$attr->name,
$attr->value,
$attr->namespaceURI ?? '(kein)'
);
}
// Wichtig · Fallstricke
Nicht direkt instanziierbar: Dom\Attr-Objekte sollten nicht mit new erzeugt werden. Neue Attributknoten legt man über Dom\Document::createAttribute() bzw. Dom\Document::createAttributeNS() an und fügt sie danach per Dom\Element::setAttributeNode() ein.
Namespaces: Bei namespace-bewusstem XML-Parsen müssen Namespace-Attribute (xmlns:…) berücksichtigt werden – sie erscheinen ebenfalls als Dom\Attr-Knoten in attributes.
Kompatibilität: Dom\Attr ist nicht kompatibel mit der alten DOMAttr-Klasse. Beide APIs können nicht gemischt werden. Für Neucode sollte ausschließlich der Dom\-Namespace verwendet werden.