studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android xml file local saxparser

para - manual de programacion android pdf



Abrir archivo XML desde res/xml en Android (3)

Creé una aplicación Java que abre un archivo xml que se ve 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, simplemente puedo crear un nodo, insertar el objeto en un ListArray y luego hacer lo que quiero con los objetos mientras recorro 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); // ...

¡Claro y simple! Ahora solo, en Android no puedo simplemente leer el archivo " res/xml/data.xml " porque " File(); " requiere un String no un integer (id). Aquí es donde estoy perdido. ¿Hay alguna forma en que pueda hacer que " File(); " abra el archivo, o esto es imposible sin usar SAXparser o XPP ? (ambos de los cuales realmente no puedo entender, no importa cuánto lo intente)
Si me veo obligado a utilizar esos métodos, ¿alguien me puede mostrar un código simple análogo a mi ejemplo?


Si está en el árbol de recursos, obtendrá una ID asignada, por lo que puede abrir una secuencia 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 minucioso.

Consulte el Listing 9. DOM-based implementation of feed parser de 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 que no lo he hecho personalmente, supongo que el código proporcionado por IBM funciona.


Prueba esto,

this.getResources().getString(R.xml.test); // returns you the path , in string,invoked on activity object


Probé el enfoque utilizando openRawResource y obtuve una SAXParseException. Entonces, en cambio, utilicé getXml para obtener un XmlPullParser. Luego usé next () para recorrer los eventos de análisis. 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(); }