Mailinglisten-Archive |
Hallo Peter,
> was heißt groß? : 1 MB, 200 MB?
Die Datei ist ca. 39 MB gross, Tendenz steigend, und wird von einem
Partner angeliefert. D.h. ich habe keinen Einfluss auf die Struktur.
> Was heißt: lesend darauf zugreifen? : Wenige Daten herausfischen? Viele
> Daten auslesen?
Ich möchte jeweils bestimmte Daten herausfischen und dann weiter
verarbeiten. Dafür wird es mehrere Schritte geben, die jeweils bestimmte
Bereiche der Struktur verarbeiten.
> Wie komplex ist die Datenstruktur?
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>
<p id="4">
<name>Peter</name>
<address>Parkstrasse 198</address>
<geoID>2</geoID>
<country>Schweiz</country>
<images>
<image num="1">
<imageURL>http://www.domain.de/img/peter.jpg</imageURL>
<thumbURL>http://www.domain.de/img/peter_t.jpg</thumbURL>
<title>Bild von Hans</title>
</image>
</images>
</p>
</list>
Die Datei ist also nicht sonderlich tief verschachtelt, enthält aber z.B
12168 "p"-Elemente. Mein "vereinfacht" oben bedeutet, dass ich einige
Kindelemente herausgenommen habe, die alle ähnlich einfach strukturiert
sind.
> Sollen die Daten sofort verarbeitet werden, oder ist es möglich, die
> XML-Datei "langsam" auszulesen und die benötigten Daten in ein
> Zwischenformat (z.B. MySQL-Tabelle) zu bringen, und damit weiterzuarbeiten?
Meine Idee ist, zuerst die gesamte Datei zu durchlaufen und nur
bestimmte Elemente in einem Zwischenformat zu speichern. Dieses
Zwischenformat wird dann weiter verarbeitet.
> XSLT, je nachdem, was man vorhat.
> Als Vereinfachung von SAX meine Parser-Klasse:
> http://www.media-palette.de/tools/xml-line/ (neue Version ist schneller)
> Wenn die Verarbeitung schnell gehen muss, würde ich einen speziellen
> SAX-Parser schreiben, wie es im PHP-Manual gezeigt wird.
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
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().
Und $reader->next() funktioniert bei der Datei nicht so richtig, weil er
erst das "list"-Element liest und bei $reader->next() dann fertig ist.
Schön wäre es, wenn ich von "p"-Element zu "p"-Element springen könnte.
Gruss,
Ralf
php::bar PHP Wiki - Listenarchive