Start · Sprachen · PHP · Referenz · Dom\HTMLElement

Dom\HTMLElement

Klasse

Repräsentiert ein einzelnes HTML-Element im neuen, HTML5-konformen DOM-Erweiterungsmodul <code>Dom\</code>.

seit PHP 8.4.0 Kategorie: xml

Signatur

class Dom\HTMLElement extends Dom\Element

Beschreibung

Dom\HTMLElement ist Teil des modernen Dom\-Namespaces, der mit PHP 8.4 eingeführt wurde und eine vollständig spezifikationskonforme DOM-Implementierung bereitstellt. Im Gegensatz zur älteren DOMElement-Klasse arbeitet Dom\HTMLElement nach dem HTML-Living-Standard des WHATWG und kennt HTML-spezifische Besonderheiten wie case-insensitive Tag-Namen, implizite Elemente und HTML-typisches Parsing.

Die Klasse erbt von Dom\Element, welche wiederum von Dom\Node abstammt. Dadurch stehen alle Standard-DOM-Methoden wie appendChild(), getAttribute(), querySelector() und viele mehr zur Verfügung. Instanzen dieser Klasse entstehen typischerweise durch Laden eines HTML-Dokuments mit Dom\HTMLDocument::createFromString() oder Dom\HTMLDocument::createFromFile().

Dom\HTMLElement ist kein direkt instanziierbares Objekt – es dient als Basisklasse für konkrete HTML-Elemente (z. B. Dom\HTMLBodyElement, Dom\HTMLAnchorElement usw.) und wird beim Traversieren oder Manipulieren von HTML-Dokumenten automatisch zurückgegeben. Der neue Namespace garantiert eine strikte Trennung zwischen HTML- und XML-Kontexten.

Typische Anwendungsfälle sind das Parsen, Auslesen und Bearbeiten von HTML-Inhalten serverseitig – etwa beim Web-Scraping, beim Aufbereiten von Nutzer-Eingaben oder beim serverseitigen Rendern von HTML-Fragmenten.

Beispiele

HTML-Dokument laden und Elemente auslesen

<?php
$html = <<<HTML
<!DOCTYPE html>
<html>
  <body>
    <h1 id="title">Willkommen</h1>
    <p class="intro">Dies ist ein Absatz.</p>
  </body>
</html>
HTML;

$doc = Dom\HTMLDocument::createFromString($html);

$h1 = $doc->getElementById('title');
echo get_class($h1) . PHP_EOL;     // Dom\HTMLElement
echo $h1->textContent . PHP_EOL;   // Willkommen
echo $h1->tagName . PHP_EOL;       // H1

$p = $doc->querySelector('.intro');
echo $p->textContent . PHP_EOL;    // Dies ist ein Absatz.
Dom\HTMLElement Willkommen H1 Dies ist ein Absatz.

Elemente manipulieren und neues Element einfügen

<?php
$doc = Dom\HTMLDocument::createFromString(
    '<!DOCTYPE html><html><body><ul id="liste"></ul></body></html>'
);

$ul = $doc->getElementById('liste');

foreach (['Eins', 'Zwei', 'Drei'] as $text) {
    $li = $doc->createElement('li');
    $li->textContent = $text;
    $ul->appendChild($li);
}

echo $doc->querySelector('#liste')->innerHTML;
<li>Eins</li><li>Zwei</li><li>Drei</li>

// Wichtig · Fallstricke

Neu in PHP 8.4: Der Dom\-Namespace ersetzt nicht die klassische DOM-Erweiterung (DOMElement etc.), sondern existiert parallel dazu. Beide Namespaces sind nicht kompatibel miteinander – Objekte können nicht gemischt werden.

HTML-spezifisches Verhalten: Tag-Namen werden in Dom\HTMLElement in Großschreibung zurückgegeben (z. B. H1), was dem HTML-Standard entspricht. Im XML-Modus (Dom\XMLDocument) bleibt die ursprüngliche Schreibweise erhalten.

Keine direkte Instanziierung: new Dom\HTMLElement() ist nicht möglich. Instanzen werden ausschließlich durch DOM-Fabrikmethoden wie Dom\HTMLDocument::createElement() oder durch Traversierung erzeugt.