1. Wir haben diesmal 2 Gewinnspiele zeitgleich für euch - Gewinne einmal ein UMI Plus E - Beim 2ten könnt ihr ein Nomu S30 gewinnen!
  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.
     

Diese Seite empfehlen