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();
}