Start · Sprachen · PHP · Referenz · Dom\ChildNode

Dom\ChildNode

Interface

Repräsentiert einen DOM-Knoten, der Geschwister-Navigation und Manipulation erlaubt (Einfügen, Ersetzen, Entfernen ohne Eltern-Referenz).

seit PHP 8.4.0 Kategorie: xml

Signatur

interface Dom\ChildNode

Beschreibung

Dom\ChildNode ist ein Interface im modernen PHP-DOM-API (Namespace Dom), das Methoden für Knoten bereitstellt, die innerhalb eines Elternknotens als Kinder existieren. Es ermöglicht das direkte Einfügen von Knoten vor oder nach dem aktuellen Knoten, das Ersetzen des Knotens durch andere Knoten sowie das Entfernen des Knotens – alles ohne expliziten Zugriff auf den Elternknoten.

Das Interface spiegelt die gleichnamige Web-API (WHATWG DOM Standard) wider und wird von konkreten Klassen wie Dom\Element, Dom\CharacterData und Dom\DocumentType implementiert. Es vereinfacht häufige DOM-Manipulationen erheblich, da der Umweg über parentNode entfällt.

Das Interface gehört zur neuen, HTML5-konformen DOM-Erweiterung in PHP 8.4, die parallel zur älteren DOMDocument-API existiert. Für Neuentwicklungen empfiehlt sich die Verwendung dieser modernen API unter dem Dom-Namespace.

  • before(...$nodes) – Fügt Knoten oder Strings unmittelbar vor dem aktuellen Knoten ein.
  • after(...$nodes) – Fügt Knoten oder Strings unmittelbar nach dem aktuellen Knoten ein.
  • replaceWith(...$nodes) – Ersetzt den aktuellen Knoten durch die angegebenen Knoten oder Strings.
  • remove() – Entfernt den aktuellen Knoten aus seinem Elternknoten.

Beispiele

Knoten entfernen mit remove()

<?php
$dom = Dom\HTMLDocument::createFromString('<ul><li id="a">Alpha</li><li id="b">Beta</li><li id="c">Gamma</li></ul>');

$betaNode = $dom->getElementById('b');
$betaNode->remove();

echo $dom->querySelector('ul')->innerHTML;
<li id="a">Alpha</li><li id="c">Gamma</li>

Knoten mit before() und after() einfügen

<?php
$dom = Dom\HTMLDocument::createFromString('<p id="main">Hallo</p>');

$p = $dom->getElementById('main');
$p->before('Vor dem Absatz. ');
$p->after(' Nach dem Absatz.');

echo $dom->body->innerHTML;
Vor dem Absatz. <p id="main">Hallo</p> Nach dem Absatz.

Knoten ersetzen mit replaceWith()

<?php
$dom = Dom\HTMLDocument::createFromString('<div><span id="old">Alt</span></div>');

$oldSpan = $dom->getElementById('old');
$newElement = $dom->createElement('strong');
$newElement->textContent = 'Neu';
$oldSpan->replaceWith($newElement);

echo $dom->querySelector('div')->innerHTML;
<strong>Neu</strong>

// Wichtig · Fallstricke

Verfügbarkeit: Dom\ChildNode steht erst ab PHP 8.4 zur Verfügung und ist Teil der neuen Dom-Namespace-API. Die ältere DOMNode-Klasse im globalen Namespace implementiert dieses Interface nicht.

Voraussetzung: Die Methoden werfen eine Dom\Exception, wenn der Knoten keinen Elternknoten besitzt (z. B. bei einem losgelösten Knoten) – insbesondere before(), after() und replaceWith() benötigen einen gültigen Elternknoten.

String-Argumente bei before(), after() und replaceWith() werden automatisch als Textknoten eingefügt; es erfolgt dabei kein HTML-Parsing. Zur Vermeidung von XSS-Risiken sollten Benutzereingaben immer als Strings (Textknoten) und niemals als roher HTML-Code übergeben werden.