1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  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 gefällt das.
  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 Forum Datum
[ERLEDIGT] Samsung S3 USB Dateien werden nicht aktualisiert Android App Entwicklung 03.08.2017
[ERLEDIGT] Android O Neue Fonts in XML Methode Android App Entwicklung 27.07.2017
[GESCHLOSSEN] Kennt jemand ein Programm , um .DEX Dateien zu öffnen, bearbeiten und wieder speichern? Android App Entwicklung 20.07.2017
[ERLEDIGT] Von SPP seriell per Bluetooth lesen Android App Entwicklung 26.04.2017
[ERLEDIGT] Instanzierung aus XML Android App Entwicklung 11.04.2017
[ERLEDIGT] (JSON-)Datei speichern Android App Entwicklung 08.04.2017
[ERLEDIGT] App (Apk) Grösse im PlayStore weg Android App Entwicklung 23.03.2017
[OFFEN] Toolbar Hintergrund Drawable animieren und in der vollen größe anzeigen Android App Entwicklung 22.03.2017
Wie lese ich den USB Port aus ? Android App Entwicklung 03.03.2017
Wie wird RelativeLayout.LayoutParams richtig angewendet ? Android App Entwicklung 24.01.2017
Du betrachtest das Thema "Lesen von richtig großen XML Dateien" im Forum "Android App Entwicklung",