2010-05-23 15 views
10

¿Cómo puedo analizar un archivo XML local en la carpeta de activos usando el analizador de extracción? No puedo hacer que el analizador de arrastre funcione. Siempre arroja una excepción io. Creo que no puedo obtener la ruta al archivo ni conectarme al archivo.xml pull parser assets xml

+0

habría que tener en cuenta los analizadores que no sea Tire? –

Respuesta

22

mixm,

que estaba jugando con diversas formas de cargar un archivo local de ambos 'activos' y 'res', pero a sus preguntas y le preguntó (como nadie parece tener):

en primer lugar, o bien asegurarse de que el XML es válido antes de probar o desactivar la validación, esto es cómo se puede hacer eso y crear instancias de un analizador de tracción al mismo tiempo:

try { 
     XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
     factory.setValidating(false); 
     XmlPullParser myxml = factory.newPullParser(); 

continuación, abra el archivo XML y se establece como entrada a su analizador de extracción:

 InputStream raw = getApplicationContext().getAssets().open("simple.xml"); 
     myxml.setInput(raw, null); 

Ahora la configuración de su lazo de extracción (o de otro tipo, depende de si usted quiere hacer diferido tirando o no, eso es sus decisiones de diseño:

 int eventType = myxml.getEventType(); 
     while(eventType != XmlPullParser.END_DOCUMENT) { 
      if(eventType == XmlPullParser.START_DOCUMENT) { 

       Log.d(MY_DEBUG_TAG, "In start document"); 
      } 
      else if(eventType == XmlPullParser.START_TAG) { 
       Log.d(MY_DEBUG_TAG, "In start tag = "+myxml.getName()); 
      } 
      else if(eventType == XmlPullParser.END_TAG) { 
       Log.d(MY_DEBUG_TAG, "In end tag = "+myxml.getName()); 

      } 
      else if(eventType == XmlPullParser.TEXT) { 
       Log.d(MY_DEBUG_TAG, "Have text = "+myxml.getText()); 
      } 
      eventType = myxml.next(); 
     } 
    } catch (XmlPullParserException e) { 

Nota del myxml.getEventType(), lo que necesita hacer esto para conseguir el parse va y maneja qué tipo de eventos estás tirando. Nota: atrapar bloques omitidos para la legibilidad.

puesto a prueba la anterior en 2.1, creo que sirve -Frank