从Android的res / xml打开XML文件

我创build了一个Java应用程序,它打开一个如下所示的xml文件

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

我可以打开它使用:

 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"); 

然后,我可以简单地创build一个节点,将对象推入一个ListArray,然后做我想要的对象,当我通过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); // ... 

干净利落! 现在只有在Android中,我不能简单地读取文件“ res/xml/data.xml ”,因为“ File(); ”需要一个String而不是integer (id)。 这是我迷路的地方。 有什么办法可以使“ File(); ”打开文件,或者这是不可能的,而不使用SAXparserXPP ? (无论我怎么努力,我都不明白这两点。)
如果我被迫使用这些方法,有人可以给我看一些类似于我的例子的简单代码吗?

Solutions Collecting From Web of "从Android的res / xml打开XML文件"

如果它在资源树中,它将得到一个分配给它的ID,所以你可以用openRawResource函数打开一个stream:

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

至于在Android中使用XML, 在ibm.com上的这个链接是非常彻底的。

请参阅Listing 9. DOM-based implementation of feed parser该链接中Listing 9. DOM-based implementation of feed parser

一旦你有了inputstream(上面),你可以将它传递给DocumentBuilder的一个实例:

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

请记住,我没有亲自做过 – 我假定IBM提供的代码工作。

我尝试了使用openRawResource的方法,并得到一个SAXParseException。 所以,我使用getXml来获得一个XmlPullParser。 然后我使用next()来遍历parsing事件。 实际的文件是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(); } 

尝试这个,

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