在Android中从res/xml打开XML文件

jer*_*emy 7 xml android file local saxparser

我创建了一个Java应用程序,它打开一个看起来像这样的xml文件:

<AnimalTree>
  <animal>
    <mammal>canine</mammal>
    <color>blue</color>
  </animal>
  <!-- ... -->
</AnimalTree>
Run Code Online (Sandbox Code Playgroud)

我可以用以下方式打开它:

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");
Run Code Online (Sandbox Code Playgroud)

然后我可以简单地创建一个节点,将对象推送到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);
// ...
Run Code Online (Sandbox Code Playgroud)

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

jco*_*lum 9

如果它在资源树中,它将获得分配给它的ID,因此您可以使用openRawResource函数打开它的流:

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

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

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

获得输入流(上图)后,可以将其传递给DocumentBuilder的实例:

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

请记住,我个人没有这样做 - 我假设IBM提供的代码有效.