Java: SAX für große XML-Dateien
Große XML-Dateien stellen oftmals ein Problem dar, weil natürlich die Verarbeitung derartiger Dateien weiterhin schnell ablaufen soll. Aufwendige Kopierverfahren im Arbeitsspeicher sind da von Nachteil und natürlich oftmals auch die Dateigröße selbst, wenn der verfügbare RAM nicht ausreicht. Beginnt das Betriebssystem dann erst einmal mit Swapping, ist daher die Performance gänzlich verloren.
Für die Praxis ergibt sich daher, dass große Dateien nicht mit DOM behandelt werden sollten. Würde man versuchen, mittels DOM ein 10GB-XML-File zu bearbeiten, wird man nicht viele Erfolge erzielen können. Hier ist ganz klar zu empfehlen, auf Alternativen wie SAX zurückzugreifen.
SAX interessiert sich im Gegensatz zu DOM nicht unmittelbar für die Syntax und vor allem für die Baumstruktur eines Dokuments. Vielmehr wird das XML sequentiell durchgearbeitet und immer dann, wenn ein Textknoten auftaucht, diese Information bereitgestellt.
Dieses Beispiel definiert eine neue Klasse, abgeleitet von dem DefaultHandler des SAX-Parsers. Immer dann, wenn beispielweise ein öffnender Knoten auftritt, wird dieser an die Methode startElement übergeben. Bei schließenden Knoten entsprechend an endElement. Benötigt man also Logiken für die Behandlung von Baumstrukturen, muss man sich darum also selber kümmern. Das kann gerade bei komplexen Strukturen zu einem hohen Aufwand führen, weshalb sich jeder darüber im klaren sein sollte, große XML-Dateien möglichst gänzlich zu vermeiden oder zumindest die Struktur einfach zu halten (vor allem eine flache Baumstruktur).



[st], 27.10.2009 15:14 Uhr
Danke für die Anmerkung, zur Erläuterung für die anderen die deine Aussage nicht verstehen:
JDOM kennt sowohl DOM-Dokumente (XML wird komplett in den Speicher gelegt) als auch eventgesteuerte Verarbeitung (mit SAX)
tinywinni, 27.10.2009 15:03 Uhr
JDOM ist nicht gleich DOM, man kann JDOM genauso gut mit SAX Parser einsetzen….