phpbar.de logo

Mailinglisten-Archive

[php] DOM oder SAX? (was: PHP5: DOM & die attribute [nachruf])

[php] DOM oder SAX? (was: PHP5: DOM & die attribute [nachruf])

"Dr. Volker Göbbels" goebbels at gmx.de
Fre Okt 1 13:36:25 CEST 2004


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