1. jskeletti, 19.05.2011 #1
    jskeletti

    jskeletti Threadstarter Erfahrener Benutzer

    Wie würdet ihr eine richtig große XML Datei am besten (und schnellsten) lesen und verarbeiten? In meinem Fall hab ich eine XML Datei mit mindestens 14000 Zeilen. Allein das laden und verarbeiten dauert um die 15-20 Sekunden, was für einen Benutzer viel zu viel Zeit ist. Ich würde das gern auf ein Minimum verkürzen. Hat jemand Erfahrung mit so etwas?

    Mein Quellcode bisher:
    PHP:
    try {
      
    /* Create a URL we want to load some xml-data from. */
       
    URL url = new URL("http://path/to/xml");

       
    DocumentBuilderFactory dbf DocumentBuilderFactory.newInstance();
       
    DocumentBuilder db dbf.newDocumentBuilder();
       
    Document doc db.parse(new InputSource(url.openStream()));

       
    NodeList nodeList doc.getElementsByTagName("utr");

       for (
    int i 0nodeList.getLength(); i++) {
         for (
    int j 0nodeList.item(i).getChildNodes().getLength(); j++) {                   
         
    // Hier einfach nur ne Ausgabe im Logfenster, später Verarbeitung
         
    System.out.println(nodeList.item(i).getChildNodes().item(j).getNodeName() + " = " nodeList.item(i).getChildNodes().item(j).getNodeValue());
         }
      }
    } catch (
    Exception ex) {
       
    Log.e("Fehler"ex.toString());
    }
     
  2. ko5tik, 19.05.2011 #2
    ko5tik

    ko5tik Android-Experte

    Di verwendest DOM-Parser, welches eine Kompletten Objelt-Baum im Speicher anlegt
    ( Speicher vrebrauch hoch, viel Allokation usv - dauert lange )

    Besserre vorgehensweise ist:
    - SAX-Parser ( Push-Parser, Anwendung wird von Parser gertrieben, du muss einen Event-Handler schreiben )
    oder
    - Pull-Parser ( Parsen wird von AZnwendung ausgelöst, Anwendung holt einzelne Events ab )

    Beide verbrauchen wesentlich weniger Speicher und sind somit schneller - und beide sind im Standart-Android enthalten.

    Wenn es ganz schnel sein muss, nimmt man den Jackson XML Parser - ist schnellste was es zur Zeit gibt, aber eine externe Abhängigkeit
     
    jskeletti bedankt sich.
  3. jskeletti, 19.05.2011 #3
    jskeletti

    jskeletti Threadstarter Erfahrener Benutzer

    Wo finde ich den Jackson XML Parser?
     
  4. ko5tik, 19.05.2011 #4
    ko5tik

    ko5tik Android-Experte

    jackson.codehaus.org - aber ich würde eher XPP empfehlen, da es schon dabei ist. Jackson ist ein sehr schweres Geschütz
     
  5. jskeletti, 19.05.2011 #5
    jskeletti

    jskeletti Threadstarter Erfahrener Benutzer

    Ich probiere alle drei aus und meld mich nochmal :)
     
  6. jskeletti, 20.05.2011 #6
    jskeletti

    jskeletti Threadstarter Erfahrener Benutzer

    Leider bekomme ich folgenden Fehler bei SAX:

    Wo muß ich dieses property setzen?
     
  7. ko5tik, 20.05.2011 #7
    ko5tik

    ko5tik Android-Experte

    Kannst du etwas mehr con deinen Code posten?
     
  8. jskeletti, 20.05.2011 #8
    jskeletti

    jskeletti Threadstarter Erfahrener Benutzer

    Hab's gerade gelöst. So wird's gelesen:

    PHP:
    try {
      
    // Pfad zur XML Datei
      
    URL url = new URL("http://path/to/xml");

      
    // XMLReader erzeugen
      
    SAXParserFactory spf SAXParserFactory.newInstance();
      
    SAXParser sp spf.newSAXParser();
      
    XMLReader xr sp.getXMLReader();
      
    ContentHandler handler = new ContentHandler();
      
    xr.setContentHandler(handler);

      
    xr.parse(new InputSource(url.openStream()));
    } catch (
    Exception ex) {
       
    Log.e("Fehler"ex.toString());
    }
    Wie die Geschwindigkeit ist, weiß ich allerdings noch nicht.
     
Die Seite wird geladen...
Ähnliche Themen - Lesen von richtig Forum Datum
[ERLEDIGT] Von SPP seriell per Bluetooth lesen Android App Entwicklung 26.04.2017
Excel Dokument mithilfe von JExcelAPI auslesen funktioniert nicht :/ Android App Entwicklung 02.03.2017
Display-Breite zum App-Start auslesen Android App Entwicklung 11.03.2017
Uri oder File path als String speichern zum wiederauslesen Android App Entwicklung 26.01.2017
SQLite auslesen und in Tabelle darstellen Android App Entwicklung 12.10.2016
Textfeld in einer App auslesen Android App Entwicklung 02.10.2016
Eingelesene Textdatei ohne Umlaute und Umbrüche Android App Entwicklung 25.08.2016
Textdatei auf SD Karte auslesen funktioniert nicht (Oneplus One) Android App Entwicklung 24.08.2016
Sensoren bzw Infos auslesen. Android App Entwicklung 05.08.2016
android string array einlesen Android App Entwicklung 10.06.2016