Start · Sprachen · PHP · Referenz · Dom\NodeList

Dom\NodeList

Klasse

Repräsentiert eine geordnete Liste von <code>Dom\Node</code>-Objekten, die z. B. als Ergebnis von <code>Dom\Element::getElementsByTagName()</code> zurückgegeben wird.

seit PHP 8.4.0 Kategorie: xml

Signatur

class Dom\NodeList implements Countable, IteratorAggregate

Beschreibung

Dom\NodeList ist die moderne, namespaced Variante der älteren DOMNodeList-Klasse und gehört zur überarbeiteten DOM-Erweiterung, die mit PHP 8.4 eingeführt wurde. Sie hält eine geordnete Sammlung von Dom\Node-Objekten und wird häufig als Rückgabewert von Methoden wie Dom\Element::getElementsByTagName() oder Dom\Document::getElementsByTagName() verwendet.

Im Gegensatz zu einem einfachen Array ist eine Dom\NodeList live, d. h. Änderungen am zugrundeliegenden Dokument (z. B. Hinzufügen oder Entfernen von Knoten) spiegeln sich sofort in der Liste wider. Auf einzelne Elemente kann über die Methode item() oder per Array-Syntax zugegriffen werden.

Dank der Implementierung von Countable und IteratorAggregate lässt sich die Liste bequem mit count() ausmessen und mit foreach iterieren. Die Eigenschaft length gibt ebenfalls die Anzahl der enthaltenen Knoten zurück.

Die Klasse ist nicht direkt instanziierbar – Objekte dieser Klasse werden ausschließlich von DOM-Methoden erzeugt.

Beispiele

Alle Absätze eines Dokuments iterieren

<?php
$doc = Dom\HTMLDocument::createFromString('<html><body><p>Erster</p><p>Zweiter</p><p>Dritter</p></body></html>');

$absaetze = $doc->getElementsByTagName('p');

echo 'Anzahl Absätze: ' . count($absaetze) . PHP_EOL;

foreach ($absaetze as $absatz) {
    echo $absatz->textContent . PHP_EOL;
}
Anzahl Absätze: 3 Erster Zweiter Dritter

Zugriff per Index und Live-Verhalten demonstrieren

<?php
$doc = Dom\HTMLDocument::createFromString('<html><body><p>Eins</p><p>Zwei</p></body></html>');

$absaetze = $doc->getElementsByTagName('p');
echo 'Vor Einfügen: ' . $absaetze->length . PHP_EOL;

// Neuen Absatz einfügen
$neuer = $doc->createElement('p');
$neuer->textContent = 'Drei';
$doc->body->appendChild($neuer);

// NodeList ist live – zeigt jetzt 3 Einträge
echo 'Nach Einfügen: ' . $absaetze->length . PHP_EOL;

// Zugriff per item()
echo $absaetze->item(2)->textContent . PHP_EOL;
Vor Einfügen: 2 Nach Einfügen: 3 Drei

// Wichtig · Fallstricke

Live-Liste: Da Dom\NodeList eine live Sicht auf das DOM darstellt, kann es beim Entfernen von Knoten innerhalb einer foreach-Schleife zu unerwarteten Ergebnissen kommen. In solchen Fällen sollte die Liste vorher in ein Array konvertiert werden: iterator_to_array($nodeList).

Nicht direkt instanziierbar: Der Versuch, new Dom\NodeList() aufzurufen, führt zu einem Fehler. Objekte dieser Klasse werden ausschließlich intern von der DOM-Erweiterung erstellt.

Kompatibilität: Dom\NodeList steht erst ab PHP 8.4 zur Verfügung. Für ältere PHP-Versionen ist die äquivalente Klasse DOMNodeList zu verwenden.