Signatur
Beschreibung
Dom\Element ist die zentrale Klasse der modernen Dom\-Erweiterung (PHP 8.4+), die den W3C-DOM-Standard deutlich näher umsetzt als die ältere DOMElement-Klasse. Jedes HTML- oder XML-Tag im Dokument wird durch eine Instanz dieser Klasse repräsentiert. Über sie lassen sich Attribute auslesen, setzen und entfernen, der Textinhalt ändern sowie Kindelemente traversieren oder einfügen.
Die Klasse implementiert sowohl Dom\ParentNode (enthält Kindelemente) als auch Dom\ChildNode (ist selbst Kind eines anderen Elements), wodurch Methoden wie append(), prepend(), before(), after() und remove() direkt auf Elementen aufrufbar sind. Zusammen mit den von Dom\Node geerbten Eigenschaften wie parentNode, childNodes und ownerDocument ergibt sich eine vollständige DOM-API.
Im Gegensatz zur älteren DOMElement-Klasse werden in Dom\Element Fehler konsequent als Ausnahmen (Dom\Exception) geworfen, und Eigenschaften sind größtenteils readonly definiert, was unbeabsichtigte Manipulationen verhindert. Attribute werden über getAttribute() / setAttribute() verwaltet; für HTML-Klassen steht classList zur Verfügung.
Typische Einsatzbereiche sind das programmatische Erzeugen und Bearbeiten von HTML-Dokumenten, das Parsen und Transformieren von XML-Feeds sowie das gezielte Extrahieren von Daten mittels querySelector() / querySelectorAll().
Beispiele
Element erzeugen, Attribut setzen und in Dokument einfügen
<?php
$doc = Dom\HTMLDocument::createEmpty();
$root = $doc->createElement('html');
$doc->append($root);
$body = $doc->createElement('body');
$root->append($body);
$p = $doc->createElement('p');
$p->setAttribute('class', 'intro');
$p->textContent = 'Hallo Welt!';
$body->append($p);
echo $p->getAttribute('class') . PHP_EOL;
echo $p->textContent . PHP_EOL;
echo $doc->saveHTML($p);
Elemente per querySelector suchen und manipulieren
<?php
$html = <<<HTML
<!DOCTYPE html>
<html>
<body>
<ul id="liste">
<li class="aktiv">Eins</li>
<li>Zwei</li>
<li class="aktiv">Drei</li>
</ul>
</body>
</html>
HTML;
$doc = Dom\HTMLDocument::createFromString($html);
// Einzelnes Element
$liste = $doc->querySelector('#liste');
echo $liste->tagName . PHP_EOL; // UL
// Mehrere Elemente
$aktive = $doc->querySelectorAll('li.aktiv');
foreach ($aktive as $el) {
$el->classList->add('hervorgehoben');
echo $el->textContent . ': ' . $el->getAttribute('class') . PHP_EOL;
}
Kindelemente entfernen und ersetzen mit ChildNode-Methoden
<?php
$doc = Dom\HTMLDocument::createFromString('<div><span>Alt</span><em>Behalten</em></div>');
$span = $doc->querySelector('span');
// Neues Element erstellen und vor dem Span einfügen
$strong = $doc->createElement('strong');
$strong->textContent = 'Neu';
$span->before($strong);
// Altes Span entfernen
$span->remove();
$div = $doc->querySelector('div');
echo $doc->saveHTML($div);
// Wichtig · Fallstricke
PHP-Version: Dom\Element ist erst ab PHP 8.4.0 verfügbar. Für ältere PHP-Versionen muss die klassische DOMElement-Klasse aus der ext/dom-Erweiterung verwendet werden. Beide Welten sind nicht direkt mischbar.
Readonly-Eigenschaften: Viele Eigenschaften wie tagName, namespaceURI oder ownerDocument sind readonly und können nicht direkt überschrieben werden — Änderungen erfolgen ausschließlich über die vorgesehenen Methoden.
Fehlerbehandlung: Ungültige Operationen (z. B. Einfügen an einer nicht erlaubten Position) werfen Dom\Exception-Ausnahmen statt wie in der alten API lediglich false oder Warnungen zurückzugeben. Code sollte daher mit try/catch abgesichert werden.
Namespace-Awareness: Bei XML-Dokumenten mit Namespaces sind die Methoden getAttributeNS(), setAttributeNS() und getElementsByTagNameNS() zu bevorzugen, da getAttribute() nur im leeren Namespace sucht.