Mailinglisten-Archive |
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