Start · Sprachen · PHP · Referenz · Dom\CharacterData

Dom\CharacterData

Klasse

Abstrakte Basisklasse für DOM-Knoten, die Zeichendaten enthalten, wie <code>Dom\Text</code>, <code>Dom\Comment</code> und <code>Dom\CDATASection</code>.

seit PHP 8.4.0 Kategorie: xml

Signatur

class Dom\CharacterData extends Dom\Node implements Dom\ChildNode

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!
Hallo Welt 10 Hallo Welt! 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>
Dom\Comment alter Kommentar neuer Kommentar <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.