Stax / Tag-Block überspringen

student_nrw

Mitglied
Hallo Zusammen,

ich habe zum Stax eine kleine Frage ... und zwar ob es möglich ist den Cursor auf einen nächsten Tag-Block zu verschieben?

zum Beispiel:

ich habe eine XML-Datei aus der ich nur bestimmte Daten auslesen möchte...
Ich möchte alle Bücher ausgeben, die von Platon geschrieben wurden...
Das erste Buch erfüllt diese Bedingung nicht, also will ich direkt zum nächsten Buch springen möchte, ohne durch alle überflüssigen Tags zu gehen...

<?xml version="1.0" encoding="ISO-8859-1"?>
<shelf>
<book type="Hardcover">
<title>Neuromancer</title>
<author>William Gibson</author>
<weitereTags1>
<weitereTags2>
.....
</weitereTags2>
</weitereTags1>
<year>1984</year>
<language lang="en" />
</book>
<book type="EBook">
<title>Politeia</title>
<author>Platon</author>
<weitereTags1>
<weitereTags2>
.....
</weitereTags2>
</weitereTags1>
<year>-370</year>
<language lang="el" />
</book>
</shelf>
 

student_nrw

Mitglied
ja richtig, aber meine xml ist ca. 20.000 Zeilen groß und mich interessieren nur 5-10 Datensätze :-/

darum suche ich nach einer Möglichkeit zum schließenden Tag in dem aktuellen Block zu springen oder halt zum nächsten offenem auf der gleichen Ebene/Höhe
 

faetzminator

Gesperrter Benutzer
Trotzdem muss der XML Parser so oder so jedes Zeichen des XML-Files lesen. Und ob der Filter dann während oder nach dem parsen passiert, spielt überhaupt keine Rolle. Darum würd ich es zuerst einlesen und dann filtern. Der einzige Unterschied ist, dass der Speicherverbrauch zwischen dem einlesen und parsen etwas grösser ist, da temporär alles zwischengespeichert wird. Aber einen Unterschied machts nicht.
 

faetzminator

Gesperrter Benutzer
Solange es nicht um Memory / Performance Issues geht, folge ich immer schön dem Statement "mach nur etwas zur gleichen Zeit". Dann ist das Programm auch wartbar und übersichtlich.
 

student_nrw

Mitglied
ja stimmt.

Und wenn die Performance nun wirklich eine Rolle spielen würde ... z.B. durch die Vorgaben der Kunden...
Welche Konzepte gibt es um eine wirklich große XML-Datei, wie in dem von mir beschriebenen Anwendungsfall, effizient zu verarbeiten? ... selbst wenn dadurch die Softwarequalität leidet
 

faetzminator

Gesperrter Benutzer
Entweder kannst du den XML Parser anpassen, so dass dieser nur gewisse Teile in die Datenstruktur schreibt, oder du schreibst eine Datenstruktur, welche nur unter bestimmten Umständen ein [c]add()[/c] ausführt. Also könnte man (davon ausgegangen dass die Daten 1:1 wie das XML gespeichert werden) in [c]Shelf[/c] die [c]List<Book>[/c] so implementieren:
Java:
List<Book> list = new ArrayList<Book>(){
    @Override
    public boolean add(Book e) {
        if ("William Gibson".equals(e.getAuthor())) {
            return super.add(e);
        }
        return false;
    }
};
Natürlich sollten auch die anderen [c]add()[/c] und [c]addAll()[/c] Methoden überschrieben werden. Oder man verwendet irgendeinen anderen Datentypen...
 

Neue Themen


Oben