bierkistenschlepper
Goto Top

Sehr große XML-Datei einlesen mit Java

Hallo,

ich soll für die Uni eine sehr große XML-Datei mit Java einlesen. Die Datei hat um die 200 MB. Es handelt sich um Kartendaten von OpenStreetMap. In Java scheint es ja eine ganze Menge von Möglichkeiten zu geben, XML zu verarbeiten. Welche Ist denn hier empfehlenswert? Ich brauche nicht alles aus der Datei, sondern erstmal nur Nodes und Ways. Von diesen brauche ich dann bestimmte Attribute. Es wäre also sinnvoll erstmal zu filtern.

Und was meinen die in den APIs immer mit Handler?

Gruß,
Bierkistenschlepper

Content-Key: 165859

Url: https://administrator.de/contentid/165859

Printed on: April 18, 2024 at 10:04 o'clock

Member: Biber
Biber May 08, 2011 at 11:52:55 (UTC)
Goto Top
Moin Bierkistenschlepper,

die beiden wichtigsten Strategien beim Java-Handling von XML-Strukturen sind DOM (Document Object Model) und SAX (Simple API for XML).

Konzeptioneller Unterschied:

Bei den ganzen DOM-Parsereien wird immer "das ganze XML-Document" in den Hauptspeicher geladen in irgendwelchen internen In-Memory-Strukturen.
Dann kann sausauschnell in dieser Tree-Struktur vorwärts/rückwärts gelesen/gesprungen werden, in der Hierarchie hoch/runtergedaddelt werden etc.

Beim SAX-Konzept wird nicht das ganze Dokument in memory gebeamt, sondern immr nur "vorwärts" eingelesen und es bleibt dem User/Java-Coder berlassen, wie er/sie reagiert, wenn sich ein neuer Knoten/ein Unter-Tag öffnet.
Vorteil: du brauchst beim "Lesen" dir nur die Knoten merken/übernehmen, die dich interessieren. ->dazu gibt es die angesprochenen Handler.
Nachteil - du liest nur in eine Richtung (vom Anfang bis zum Ende der Datei, kannst nicht rückwärts gehen).

In diesem Fall sollten also die Handler für "Nodes" und "Ways" diese Knoten auslesen und sich die Inhalte "merken" und verarbeiten, andere Unterknoten sollten nur gelesen werden vom Open-Tag bis zum Close-Tag, aber nicht "gemerkt" und nicht weiterverarbeitet werden.

Also lies bei SAX-Parsern weiter.

Grüße
Biber
Member: Bierkistenschlepper
Bierkistenschlepper May 08, 2011 at 14:22:22 (UTC)
Goto Top
Hi Biber, danke schonmal für die verständliche Antwort!

Ja, SAX ist definitiv das richtige, denn die Dateien sind nicht verschachtelt. Und wie genau liest SAX ein? Zeilenweise? Elementweise?
Member: Biber
Biber May 08, 2011 at 15:08:56 (UTC)
Goto Top
Moin Bierkistenschlepper,

Zitat von @Bierkistenschlepper:
Hi Biber, danke schonmal für die verständliche Antwort!

Und wie genau liest SAX ein? Zeilenweise? Elementweise?
Schade, Pink Floyd waren vermutlich vor deiner Zeit das Maß aller Dinge.

Damals gab es solche auch immer noch auf die IT-Belange passenden Songzeilen wie
Can you tell a green field
from a cold steel rail?
A smile from a veil?
Do you think you can tell?


Der Begriff "Zeile" ist ausserhalb des Sprachumfangs aller XML-Definitionen.
Es ist einer XML-Datei vollkommen Banane, ob die XML-Datei überhaupt aus mehr als einer Zeile besteht.
Es wird immer von <einTag> bis </einTag> geparst - also mit deinem Vokabular "elementweise".
Und die Handler (letzten Endes sind es ja Events) für verschiedene <einTag>s werden halt aufgerufen u.a. bei Ereignis "<einTag> beginnt" und "<einTag> endet hier".

Grüße
Biber