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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 165859
Url: https://administrator.de/contentid/165859
Ausgedruckt am: 23.11.2024 um 12:11 Uhr
3 Kommentare
Neuester Kommentar
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
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
Moin Bierkistenschlepper,
Damals gab es solche auch immer noch auf die IT-Belange passenden Songzeilen wie
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
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.Hi Biber, danke schonmal für die verständliche Antwort!
Und wie genau liest SAX ein? Zeilenweise? Elementweise?
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?
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