2010-11-11 5 views
1

J'essaye d'analyser un fichier XML assez volumineux - 1 Mo +, mais j'ai quelques difficultés. J'ai d'abord essayé d'ajouter le fichier xml à la res/xml et de l'analyser avec le XmlResourceParser, mais j'ai reçu une exception disant "Les données dépassent UNCOMPRESS_DATA_MAX". Après un peu de recherche, j'ai découvert que les fichiers compressés doivent être décompressés en mémoire avant de lire et que cette restriction ne s'applique pas aux fichiers bruts. Cependant lorsque vous essayez d'analyser le fichier xml de la résolution/dossier brut avec le SAXParser, je reçois un IOException, sans message et stacktrace:Analyse de gros fichiers XML sous Android

SAXParserFactory spf = SAXParserFactory.newInstance(); 
SAXParser sp = spf.newSAXParser(); 
XMLReader xr = sp.getXMLReader(); 
xr.setContentHandler(myXMLHandler); 
InputSource src = new InputSource(stream); 
xr.parse(src); // IOException 

D'après ce que je comprends les restrictions de mémoire ne sont pas applicables aux ressources brutes , mais qu'est-ce qui cause cette exception?

Voici le stacktrace de logcat:

11-11 23:47:50.729: WARN/System.err(4886): java.io.IOException 
11-11 23:47:50.739: WARN/System.err(4886):  at android.content.res.AssetManager.readAsset(Native Method) 
11-11 23:47:50.749: WARN/System.err(4886):  at android.content.res.AssetManager.access$800(AssetManager.java:36) 
11-11 23:47:50.759: WARN/System.err(4886):  at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:542) 
11-11 23:47:50.759: WARN/System.err(4886):  at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:504) 
11-11 23:47:50.769: WARN/System.err(4886):  at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:467) 
11-11 23:47:50.779: WARN/System.err(4886):  at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:329) 
11-11 23:47:50.790: WARN/System.err(4886):  at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:286) 
+0

Veuillez publier la sortie de logcat. Il n'est pas possible d'avoir une exception levée sans avoir au moins une sortie de niveau d'erreur logcat. –

+0

J'ai copié la sortie de logcat. – Krassi

+0

avez-vous essayé cette méthode avec un XML <1MB. Juste pour l'exclure – Mikpa

Répondre

0

diviser votre fichier en utilisant cette commande linux divisé -l 1 main.xml

private String readTxt() 
{ 
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
    for(int J=1;J<15;J++) 
    { 
     int i; 
     try 
     { 
      InputStream raw = this.getAssets().open("xa"+J);  
      i = raw.read(); 
      while (i != -1) 
      { 
       byteArrayOutputStream.write(i); 
       i = raw.read(); 
      } 
      raw.close(); 
     } 
     catch (IOException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

utilisation sous forme de chaîne dans votre analyse syntaxique SAX.