Abrir archivo XML desde res / xml en Android

He creado una aplicación Java que abre un archivo xml que se parece a algo así:

<AnimalTree> <animal> <mammal>canine</mammal> <color>blue</color> </animal> <!-- ... --> </AnimalTree> 

Y puedo abrirlo usando:

 File fXmlFile = getResources.getXml("res/xml/data.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); NodeList animalNodes = doc.getElementsByTagName("animal"); 

Entonces puedo simplemente crear un nodo, empujar el objeto en un ListArray, a continuación, hacer lo que quiero con los objetos como lobo a través del ListArray.

 for (int temp = 0; temp < animalNodes.getLength(); temp++) { Node nNode = animalNodes.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; question thisAnimal = new animal(); thisAnimal.mammal = getTagValue("mammal",eElement); // ... 

Simple y sencillo! Ahora sólo en Android no puedo simplemente leer el archivo " res/xml/data.xml " porque " File(); " requiere una String no un integer (id). Aquí es donde estoy perdido. ¿Hay alguna manera que puedo hacer " File(); " abrir el archivo, o es esto imposible sin usar SAXparser o XPP ? (Ambos de los cuales realmente no puedo entender, no importa cuánto lo intente.)
Si estoy obligado a usar esos métodos, ¿alguien puede mostrarme algún código simple análogo a mi ejemplo?

Si está en el árbol de recursos, obtendrá un ID asignado a él, para que pueda abrir un flujo con la función openRawResource:

InputStream is = context.getResources().openRawResource(R.xml.data);

En cuanto a trabajar con XML en Android, este enlace en ibm.com es increíblemente exhaustivo.

Vea el Listing 9. DOM-based implementation of feed parser en ese enlace.

Una vez que tenga el flujo de entrada (arriba), puede pasarlo a una instancia de DocumentBuilder:

 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document dom = builder.parse(this.getInputStream()); Element root = dom.getDocumentElement(); NodeList items = root.getElementsByTagName("TheTagYouWant"); 

Tenga en cuenta, no he hecho esto personalmente – estoy asumiendo el código proporcionado por IBM funciona.

Intenté el acercamiento usando openRawResource y conseguí un SAXParseException. Así que, en su lugar, usé getXml para obtener un XmlPullParser. Luego utilicé next () para pasar por los eventos de análisis sintáctico. El archivo real es res / xml / dinosaurs.xml.

 XmlResourceParser parser = context.getResources().getXml(R.xml.dinosaurs); int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_DOCUMENT : Log.v(log_tag, "Start document"); break; case XmlPullParser.START_TAG : Log.v(log_tag, "Start tag " + parser.getName() ); break; case XmlPullParser.END_TAG : Log.v(log_tag, "End tag " + parser.getName() ); break; case XmlPullParser.TEXT : Log.v(log_tag, "Text " + parser.getText() ); break; default : Log.e(log_tag, "Unexpected eventType = " + eventType ); } eventType = parser.next(); } 

Prueba esto,

 this.getResources().getString(R.xml.test); // returns you the path , in string,invoked on activity object 
  • Acolchado CardView y esquinas redondeadas
  • ¿Por qué el estilo y el diseño no usan el espacio de nombres de Android?
  • Convertir PSD a Android XML (formato) Formato?
  • Obtención de recursos de / res en dependencia
  • SwitchPreference y CheckBoxPreference en el código
  • Cómo definir caracteres especiales en la matriz de implementación de java Aplicación?
  • ¿Cómo eliminar la barra de acción azul en Android?
  • Crear vista dinámica, múltiples vistas X veces, obtener / establecer valor para cada grupo
  • Imagen de fondo de Android en archivo XML
  • Color de fondo de elemento de lista seleccionado inesperadamente reutilizado después de desplazamiento de lista en tabletas
  • Almacenamiento de archivos de prueba en el proyecto de prueba
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.