2011-02-24 14 views
8

Estoy escribiendo una aplicación que leerá XML de un servicio web (probablemente a través de kSOAP2). Estoy bastante contento con el análisis SAX, ya que he hecho XML analizando aplicaciones de iPhone.Android: lectura de XML del recurso local (para pruebas)

Lamentablemente, el servicio web aún no es público, por lo que para las pruebas iniciales tengo algunos archivos que contienen el XML que necesito analizar. En esta fase temprana dev sólo hay que leer el XML a partir de los archivos y pasarlo en el analizador XML

Xml.parse(this.testXML, root.getContentHandler()); 

¿Cómo se lee el código XML de un archivo/recurso en una cadena de pasar a este método. Quiero romper y probar el analizador sintáctico, pero este simple paso me está frenando.

Gracias

Respuesta

12

Crear una carpeta prima según Resol

Ponga el archivo XML de allí, por ejemplo. testXML.xml:

/res/raw/testXML.xml

Usted debe ser capaz de usar el analizador XML usando eso como un InputStream:

Xml.parse(getResources().openRawResource(R.raw.testXML), Xml.Encoding.UTF_8, root.getContentHandler()); 

probar eso.

2

Encontré una solución. Usando activos. Aquí está el ejemplo de código simple de cómo lo hice. Sé que podría haber usado XmlPullParser para simplemente cargar un archivo xml de res, pero quería usar el análisis SAX. Esto me permite simplemente lanzar una cadena XML en el analizador SAX para probar antes de conectar el servicio web.

Simplemente utiliza una vista simple con un botón para iniciar la carga del archivo y un TextView para mostrar el XML por el momento. Puedo seguir con mi analizador :)

package com.martins.XmlParserTest 
import java.io.IOException; 
import java.io.InputStream; 

import android.app.Activity; 
import android.content.res.AssetManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class Main extends Activity { 

Button btn; 
TextView tvXml; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Button btn = (Button) findViewById(R.id.button1); 

    btn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // Load XML for parsing. 
      AssetManager assetManager = getAssets(); 
      InputStream inputStream = null; 
      try { 
       inputStream = assetManager.open("textxml.xml"); 
      } catch (IOException e) { 
       Log.e("tag", e.getMessage()); 
      } 

      String s = readTextFile(inputStream); 
      TextView tv = (TextView)findViewById(R.id.textView1); 
      tv.setText(s); 
     } 
    }); 
} 


private String readTextFile(InputStream inputStream) { 
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 

    byte buf[] = new byte[1024]; 
    int len; 
    try { 
     while ((len = inputStream.read(buf)) != -1) { 
      outputStream.write(buf, 0, len); 
     } 
     outputStream.close(); 
     inputStream.close(); 
    } catch (IOException e) { 

    } 
    return outputStream.toString(); 
} 
} 
+0

Ah, se olvidó de mencionar. El archivo XML debe ir en la carpeta/assets en el proyecto. Espero que alguien más lo encuentre útil algún día. – MartinS

+2

Martin, ¿has intentado mover el XML en bruto como dije? Hice un proyecto de prueba y encontré que funciona si pones el XML en una carpeta llamada 'raw' en lugar de 'xml'. No estoy seguro de por qué hace la diferencia, pero lo hace. Solo me gustan las soluciones eficientes y una línea definitivamente es muy eficiente :) – Kevin

+0

Creo que los archivos xml 'en bruto' se almacenan en los activos como archivos mientras que los 'xml' xml se almacenan como xml pre-analizados (a través de XmlResourceParser). – phreed

0

Aumenta excepción debido al mal formada XML (línea 1, Pos0).

Usted le dice al analizador que la codificación es UTF-8 y si no es así, puede recibir varios errores (dependiendo de los analizadores). Si está utilizando un editor que no sea xml para editar su XML, puede guardar el archivo en una codificación diferente independientemente de lo que haya declarado en el documento XML.

Cuestiones relacionadas