Start · Sprachen · PHP · Referenz · Dom\Attr

Dom\Attr

Klasse

Repräsentiert ein Attribut eines <code>Dom\Element</code>-Objekts im modernen PHP-DOM-API.

seit PHP 8.4.0 Kategorie: xml

Signatur

class Dom\Attr extends Dom\Node

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 true fü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
}
Name: id Wert: intro Owner: P Neuer Wert: 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)'
    );
}
Attr: xmlns:dc | Wert: http://purl.org/dc/elements/1.1/ | NS: http://www.w3.org/2000/xmlns/ Attr: dc:title | Wert: Test | NS: http://purl.org/dc/elements/1.1/ Attr: lang | Wert: de | NS: (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.