Signatur
Beschreibung
Dom\CharacterData ist eine abstrakte Basisklasse im modernen PHP-DOM-API (Namespace Dom\, eingeführt in PHP 8.4), die gemeinsame Funktionalität für alle Knoten bereitstellt, deren Inhalt aus Zeichendaten (Text) besteht. Direkte Unterklassen sind Dom\Text, Dom\Comment und Dom\CDATASection.
Über diese Klasse erhält man Zugriff auf den Textinhalt des Knotens sowie auf Methoden zur Manipulation dieses Inhalts – etwa zum Anhängen, Einfügen, Löschen oder Ersetzen von Teilzeichenketten. Die Eigenschaft data liefert den aktuellen Zeicheninhalt, während length die Anzahl der Zeichen angibt.
Die Klasse implementiert das Dom\ChildNode-Interface, das Methoden wie before(), after(), replaceWith() und remove() bereitstellt und damit die Manipulation des Knotens im Dokumentbaum vereinfacht. Dom\CharacterData selbst kann nicht direkt instanziiert werden; man arbeitet stets mit einer ihrer konkreten Unterklassen.
Im Unterschied zur älteren DOMCharacterData-Klasse (ohne Namespace) ist Dom\CharacterData Teil des neuen, spezifikationskonformen DOM-APIs in PHP 8.4 und bietet eine modernere, konsistentere Schnittstelle.
Beispiele
Textinhalt eines Knotens lesen und manipulieren
<?php
$doc = Dom\XMLDocument::createFromString('<root><item>Hallo Welt</item></root>');
// Textknoten abrufen
$item = $doc->querySelector('item');
$textNode = $item->firstChild; // Dom\Text, erbt von Dom\CharacterData
echo $textNode->data . PHP_EOL; // Hallo Welt
echo $textNode->length . PHP_EOL; // 10
// Text anhängen
$textNode->appendData('!');
echo $textNode->data . PHP_EOL; // Hallo Welt!
// Teilstring ersetzen (offset, count, neue Daten)
$textNode->replaceData(0, 5, 'Guten Tag');
echo $textNode->data . PHP_EOL; // Guten Tag Welt!
Kommentarknoten per CharacterData-API bearbeiten
<?php
$doc = Dom\XMLDocument::createFromString('<root><!-- alter Kommentar --><p>Text</p></root>');
$root = $doc->documentElement;
$comment = $root->firstChild; // Dom\Comment, erbt von Dom\CharacterData
echo get_class($comment) . PHP_EOL; // Dom\Comment
echo trim($comment->data) . PHP_EOL; // alter Kommentar
// Kommentarinhalt vollständig ersetzen
$comment->data = ' neuer Kommentar ';
echo trim($comment->data) . PHP_EOL; // neuer Kommentar
// Knoten aus dem Baum entfernen (via ChildNode-Interface)
$comment->remove();
echo $doc->saveXml($root) . PHP_EOL; // <root><p>Text</p></root>
// Wichtig · Fallstricke
Abstrakte Klasse: Dom\CharacterData kann nicht direkt mit new instanziiert werden. Verwende stets eine konkrete Unterklasse (Dom\Text, Dom\Comment, Dom\CDATASection) oder erzeuge Instanzen über Fabrikmethoden des Dokuments wie createTextNode(), createComment() etc.
PHP-Version: Die Klasse im Namespace Dom\ ist erst ab PHP 8.4 verfügbar. Für ältere PHP-Versionen existiert die funktionsgleiche, aber weniger spezifikationskonforme Klasse DOMCharacterData ohne Namespace.
Zeichenkodierung: Alle Offset- und Längenangaben (z. B. bei substringData(), deleteData()) beziehen sich auf UTF-16-Codeeinheiten, wie es die DOM-Spezifikation vorschreibt. Bei reinem ASCII-Text entspricht dies der Zeichenanzahl; bei mehrbyteigen Unicode-Zeichen kann es zu Abweichungen kommen.