phpbar.de logo

Mailinglisten-Archive

[php] Grosse XML Dateien mit PHP 5 verarbeiten

[php] Grosse XML Dateien mit PHP 5 verarbeiten

Peter Bieling network at media-palette.de
Son Dez 4 17:30:07 CET 2005


Hallo Ralf,

Ralf Eggert wrote:

> Die Datei ist ca. 39 MB gross, Tendenz steigend, und wird von einem
> Partner angeliefert. D.h. ich habe keinen Einfluss auf die Struktur.

das scheint mir fast zuviel, um "direkt" damit zu arbeiten, also z.B. 
bestimmte Datensätze über ein Webinterface abfragen und anzeigen.

[...]

> Etwas vereinfacht sieht sie so aus:
> 
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <list date="2005-11-25 05:31:37" language="de" num="12168">
>   <p id="2">
>     <name>Hans</name>
>     <address>Gartenstrasse 17</address>
>     <geoID>1</geoID>
>     <country>Deutschland</country>
>     <images>
>       <image num="1">
>         <imageURL>http://www.domain.de/img/hans.jpg</imageURL>
>         <thumbURL>http://www.domain.de/img/hans_t.jpg</thumbURL>
>         <title>Bild von Hans</title>
>       </image>
>     </images>
>   </p>

[...]
Also so wie hier:
http://www.media-palette.de/xml-line-0-4-3-6-alpha/examples/get_record.php

[...]
> Meine Idee ist, zuerst die gesamte Datei zu durchlaufen und nur
> bestimmte Elemente in einem Zwischenformat zu speichern. Dieses
> Zwischenformat wird dann weiter verarbeitet.

Über das id-Attribut könnte man natürlich bequem auf einzelne 
"Datensätze" zugreifen.

> Eine schnelle Verarbeitung wäre schon wünschenswert. Welche Stelle im
> PHP Manual meinst du genau? Diese hier:
> 
> http://www.php.net/manual/de/ref.xml.php

Ja, die ersten beiden Beispiele zeigen ja, wie die Parserfunktionen 
arbeiten. In meiner Klasse werden genau diese Funktionen genutzt.
> 
> XMLReader soll sich ja besser für grosse XML Dateien eignen als SAX,
> aber das $reader->read() ist ja sehr umständlich. Wenn ich nur
> 
>   <name>Hans</name>
> 
> lesen möchte, benötige ich alleine drei Mal ein $reader->read().

Für solche Abfragen könnte man die Datei zweimal durchlaufen.
Phase 1: name "Hans" suchen
http://www.media-palette.de/tools/xml-line/tutorial/index.html#kap2
Dann aus dem Ergebnisarray den Datensatz ermitteln und anschließend den 
kompletten Datensatz anhand des Pfades einlesen.

Viele Grüße

Peter

php::bar PHP Wiki   -   Listenarchive