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:
- Super.onCreateView en Fragmentos
- La animación de vista de Android se detiene al salir de la pantalla
- set android: texto de strings.xml
- Marcador de Google Maps para Android: Released unknown imageData reference
- Las comillas no se muestran en la pantalla
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?
- Almacenar datos estáticos en Android - recurso personalizado?
- ¿Cómo obtener IntelliJ IDEA para hacer la sangría correcta de xml etiquetas con atributos en varias líneas?
- Problemas con el diseño de XML de Android
- Animación flotante suave con traducción en XML
- ¿Cómo puedo generar recursos XML en tiempo de ejecución en Android?
- Android TextView debe desplazarse verticalmente automáticamente
- Guía de diseño XML de Android
- ¿Cómo obtengo un botón para abrir otra actividad en Android Studio?
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
- Hacer que la actividad se ejecute en segundo plano
- "@android: style / TextAppearance.StatusBar.EventContent.Title" establece el color en blanco en lugar de gris en android L