Hi!
Zitat von
Daniel G:
aus deinem leicht gereiztem Kommentar lese ich mal raus, dass ich und der Kollege in deinem Blog nicht die Ersten sind. ;)
Ja, leider. Ich habe schon soviele dumme Diskussionen führen müssen über meine Lib, warum die denn so unfähig mal so schnell 2 GB zu verarbeiten oder was man denn so für einen Scheiss verzapft hat - der geht ja gar nicht bei 500 MB XMLs. Und nach tagelangem e-mail Verkehr darf man sich dann anhören, dass die Lib es einfach trotzdem schaffen muss und
SAX &
DOM irrelevant sind, da ausreden. Von daher bin ich empfindlich an der Stelle...
Aber ich hatte es auch nicht so verstanden, wie geschrieben: nichts persönliches.
Bei einem
DOM Parser wird die
XML Datei geparst und jeder Knoten wird entsprechend im Speicher dargestellt und ist somit jederzeit sofort verfügbar. Bei einem
SAX Parser wird grundsätzlich nichts im Speicher angelegt sondern er hangelt sich durch die Struktur der
XML Datei und ruft immer einen entsprechenden Callback auf für den aktuellen Kontext den er gerade parst (Text, Node, Attribute, etc). Der Callback kann von dem Nutzer des Parsers dann genutzt werden um, wenn Struktur, Position und Name stimmen, die entsprechenden Informationen abzulegen. Dafür kann man dem
Sax Parser auch mal sagen: überspringe die aktuelle Subknoten und gehe zum nächsten Knoten auf gleicher Ebene, etc. Auch einen Knoten oder zurück oder direkte Addressierung eines Elementes um von da an zu parsen. Dies ist der richtige Weg bei grossen Datenmengen, da du eh nur einen Teild er Daten aus der großen Menge brauchst. Von daher entweder vor dem rendern der Kartendaten vllt. ein paar Details vorher ermitteln oder alles online ermitteln beim malen. Aber ein kleines Vorcache sollte sich da schon anbieten.
Das
SAX Prinzip unterscheidet sich aber halt völlig vom
DOM Prinzip, muss es aber auch - sonst würden wir immernoch dabei sein und alle Daten in den Speicher laden.
Und nun zu den Links:
1.
DOM Modell:
http://www.w3.org/DOM/
2.
SAX Modell:
http://www.saxproject.org/
3.
SAX Implementation für Delphi:
http://saxforpascal.sourceforge.net/ (
Overview,
SAX vs DOM)
Das
SAX Projekt ist von 2003 und man müsste nach dem Download erstmal die auf der SF.net Seite angegebenen Bugs fixen, aber es ist eine Möglichkeit. Alle anderen Möglichkeiten wären entsprechende
ActiveX Objekte wie z.B.
MSXML. Dieser kann beides
DOM &
SAX und wird ja von CodeGear aufbereitet mitgeliefert.