phpbar.de logo

Mailinglisten-Archive

[php] Entsprechung simpleXML und DOM

[php] Entsprechung simpleXML und DOM

Norman Markgraf norman at sefiroth.de
Sam Jul 21 15:24:51 CEST 2007


Yannik Hampe schrieb:
> Norman Markgraf wrote:
>   
>> Yannik Hampe schrieb:
>>     
>>> Die DOM ist schon sehr mächtig. Das führt natürlich auch dazu, dass sie 
>>> ein Ram-/ und CPU-"Verschwender" ist. Man muss sich überlegen, wo man es 
>>> einsetzt :-).
>>>   
>>>       
>> Und daher benutzt Du also das auf DOM aufgesetzte XPath, was nochmal 
>> mehr RAM und mehr CPU 'verschwendet'... ;-)
>>     
>
> Gibt es in der DOM denn eine Alternative zum XPath? getElementsByTagName 
> führt jedenfalls schonmal nicht notwenigerweise zu dem gleichen Ergebnis 
> wie XPath (es geht uns ja nur um einen Unterknoten des root-Knotens und 
> nicht auch noch um deren Unterknoten. Da könnte ich mir schon 
> vorstellen, dass XPath schneller ist...
>   
Klar ist XPath schneller (zu programmieren), es basiert ja auf dem DOM 
und benutzt auch die Methoden von DOM. Und zu den gleichen Ergebnissen 
wird es auch führen, wenn man gleich(artige) Anfragen stellt.

Nichts gegen XPath, nur wer XPath einsetzt sollte sich im klaren darüber 
sein, dass er eine weiter Schicht zwischen sich und dem Dokument packt. 
Mit anderen Worten halt noch mehr Speicher und CPU-Last veranstaltet.

Wenn man nur einen Kindknoten hat, dann ist (wie ich oben schon einmal 
geschrieben habe) $root->firstChild sicher die schnellste Wahl. (Auch um 
zu prüfen ob ein Knoten überhaupt Kindknoten besitzt.) - Jedenfalls, 
wenn man sich auf die Methoden des Document Object Models (DOM) 
eingelassen hat.

Die Nachteile sind aber auch völlig klar. Was ist wenn das erste Kind 
eben nicht das Gesuchte ist ... Was wenn sie der Aufbau der XML Datei 
völlig geändert hat  ... etc.

Wenn man also DOM sagt, dann sollte man schon ->getElementsByName(NS) 
verwenden oder aber XPath benutzen. Wobei ich aus 
Geschwindigkeitsgründen nur dann XPath benutzen würde, wenn ich sehr 
viele Anfragen in dem Dokument habe. Bei vielen Änderungen an dem 
Dokument oder wenn ich es selber 'nur' aufbaue mittels DOM, dann sollte 
ich mir die Initialisierung von XPath vielleicht sparen...
(Nebenbei beachteman aber auch immer den Hinweis von Saulo Vallory im 
PHP (Online-)Handbuch:

|The DOMXPath object doesn't create a reference to the document. If you 
load a new xml using either load, loadXML or loadHTML functions the 
DOMXPath object will still query and evaluate over the source in the 
DOMDocument when it was created.||)|
>> DOM ist wirklich mächtig. Es gibt auch andere Ansätze um mit XML Dateien 
>> umzugehen. Unter PHP sind aber leider nicht viele davon implementiert. :(
>>     
>
> Es gibt die DOM, simplexml und SAX. Was willst du mehr? :-).
>   
SimpleXML ist sowas wie JDOM für PHPler. Im Prinzip eine PHP nähere 
Implementierung der Funktionalität von DOM. Der Vorteil vom DOM ist aber 
die Standardisierung, und genau den Punkt sollte man nicht 
unterschätzen. Hat man sich erstmal daran gewöhnt, so ist DOM sicher 
genauso gut zu verwenden wie SimpleXML.

Wirklich spannend wird es nur, wenn auch in PHP irgendwann mal mehr als 
nur DOM level 3 core und DOM level 3 XPath implementiert wird.... (und 
dann möglichs vollständig)

Nun was ich mehr möchte, neben einem push parser (also SAX bzw SAX2, bei 
PHP unter XML versteckt) hätte ich ich gerne noch einen pull parser 
unter PHP :D

Norman

php::bar PHP Wiki   -   Listenarchive