Mailinglisten-Archive |
Hallo zusammen, da haben wir doch mal wieder eines meiner Lieblingsthemen ;o) SAX vs. DOM Die eine Technik wird die andere nie erstzen. Beide haben verschiedene Anwendungsfälle. Je nach Menge an Input und gewünschtem Output wird man die eine oder andere wählen. Man kann sich das wie folgt veranschaulichen: Man hat ein sehr großes XML-Dokument. Das stellt man sich vor wie eine weite Landschaft. Die einzelnen Elemente sind irgendwelche Dinge, die darin herum stehen. Jetzt habe ich zwei Möglichkeiten, dieser Dinge habhaft zu werden: 1. Ich picke mir gezielt einzelne heraus. Dazu muß ich aber wissen, wo mein gesuchtes Ding steht, am besten noch auf einer Landkarte. Das ist DOM. 2. Ich durchkämme die gesamte Landschaft und sortiere jedesmal die heraus, die ich haben will, wenn ich auf so ein Ding stoße. Das ist ein eventbasierter SAX-Parser. Die logischen Folgen der beiden Methoden sind: - brauche ich nahezu alle Dinge aus der Landschaft eignet sich ein SAX-Parser am besten. Er stößt automatisch auf jedes Element in einem Dokument. - will ich mir gezielt, nach Angabe einer Koordinate (aka XPath) ganz wenige Infos raus picken, nehme ich DOM. - Habe ich extrem große Datenbestände, brauche aber nur wenig davon, würde ich wohl trotzdem SAX verwenden, weil ein DOM-Parser erst einmal hingeht und sich das komplette Dokument einverleibt (Stichwort Landkarte) und dann sagt: "Ok, jetzt hab ich alles verdaut, was davon willst du haben?" Und das Größenverhältnis eines DOM-Dokuments im Vergleich zu den XML-Quellen wird auf gut 10:1 geschätzt im Mittel. Sprich 20MB XML machen 200MB DOM Tree! - Ist es umständlich, den Ort der Dinge genau festzulegen, nehme ich auch einen SAX-Parser, weil der ja alle Elemente bekommt - irgendwann ;) - Brauche ich genaueste Informationen über die Topologie des Fundortes (also wie tief verschachtelt liegt das Element? Wer sind seine Nachbarn, sein Parent etc.?), nehme ich DOM, weil das Mitführen einer Statemachine in SAX-Parsern umständlich werden kann. Sollte man doch einen SAX-Parser wollen, würde man ihn in eine Klasse wrappen, weil man so elegant die globalen Variablen für die Statemachine umgehen kann. - Ist meine wichtigste Aufgabe die, daß ich alle Attribute eines Elements "auf einen Schuß" brauche, nehme ich SAX, weil ich da im Eventhandler alle Attribute als Array auf einen Schlag bekomme. So, Zeit, wieder einen Kunden zu quälen ;)) Viele Grüße, Volker Göbbels -- Dr. Volker Göbbels vmg at arachnion.de Arachnion GmbH & Co. KG http://www.arachnion.de Sandkaulbach 4 Tel. ++49 (0) 241 5591106 52062 Aachen Fax ++49 (0) 241 5591107
php::bar PHP Wiki - Listenarchive