DOM-Manipulationen

PHP bietet auch einen DOM-Parser an, der ein komplettes XML-Dokument in den Hauptspeicher lädt. Ein solches Laden ist nur für kleine XML-Dateien praktikabel, da sonst sowohl der Arbeitsspeicher nicht reicht wie auch der Benutzer auf das Laden des Dokumentes längere Zeit warten muss, bis Informationen ausgelesen werden können. Nun ist es allerdings möglich, sich innerhalb der DOM-Struktur – mit DOM wird der Baum bezeichnet, den ein XML-Dokument darstellt – zu bewegen und auch diese Struktur sogar zu verändern. Folgendes kleine Programm demonstriert dies:

In der zweiten Zeile wird das DOMDocument erzeugt, welches mit dem Inhalt der Datei svgexample.svg in Zeile 3 über den Aufruf von loadXML() gefüllt wird. Mit dem ersten firstChild-Aufruf in der vierten Zeile wird $svgElement der SVG-Wurzelknoten zurückgegeben. Unter childNodes lässt sich eine durchlaufbare Liste abrufen, welche die Kindknoten beinhaltet. Hierbei handelt es sich nicht nur um die vier Tags, die auf dieser Ebene existieren, sondern auch um eventuellen Text, der vor und nach diesen Tags steht. So werden in dem gezeigten Fall neun Einträge zurückgeliefert, die in der darauffolgenden Schleife nacheinander ausgegeben werden.

Nun geht es an die Manipulationen: Mit removeChild ist es möglich, einen Kindknoten eines Knoten zu entfernen. Dabei ist es wichtig, dass dieser Knoten auch ein direkter Kindknoten ist. In dem gezeigten Fall wird der Kindknoten unter allem dem $svgElement folgenden Knoten gesucht, der den Tagnamen circle trägt. Es wird eine Liste an Knoten geliefert, für die dies der Fall ist. Nachfolgend wird nur der erste und in diesem Fall einziger Knoten genutzt. Nach dem Aufruf verschwindet der Kreis innerhalb des SVG-Bild. Im Folgenden wird dieser Kreis nun durch ein Rechteck ersetzt. Dieses wird zunächst durch einen Aufruf auf dem DOMDocument über createElement() erzeugt, dann mit den passenden Attributen mit setAttribute() belegt und schließlich mit appendChild() an die passende Position, nämlich an das $svgElement angefügt.

In der letzten Zeile wird das gesamte XML-Dokument mit Hilfe von saveXML() wieder ausgegeben.

Unser kleines Demonstrationsprogramm reicht nicht aus, um alle Features, die enthalten sind, zu demonstrieren. Unter anderem ist es möglich, auch Knoten mit replaceChild auszutauschen. Mit cloneNode() lassen sich Kopien ganzer Teilbäume anfertigen. Mit hasChildNodes() bzw. mit hasAttributes() ist es möglich, zu prüfen, ob Kinder existieren oder ob ein Knoten Attribute beinhaltet. Mit removeAttribute() lassen sich Attribute auch von Knoten entfernen. Zu Funktionen, wo dies möglich ist, existieren Varianten, die auch Namespaces verarbeiten können. Zusätzlich ermöglicht diese Bibliothek es nicht nur XML-Dokumente zu verarbeiten, sondern Sie können auch HTML-Dokumente lesen und verändern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert