Start · Sprachen · PHP · Referenz · Dom\Element

Dom\Element

Klasse

Repräsentiert ein einzelnes Element in einem HTML- oder XML-Dokument und bietet Methoden zum Lesen und Manipulieren von Attributen, Kindelementen und Inhalten.

seit PHP 8.4.0 Kategorie: xml

Signatur

class Dom\Element extends Dom\Node implements Dom\ParentNode, Dom\ChildNode

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);
intro Hallo Welt! <p class="intro">Hallo Welt!</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;
}
UL Eins: aktiv hervorgehoben Drei: aktiv hervorgehoben

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);
<div><strong>Neu</strong><em>Behalten</em></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.