如何从本地res / raw文件夹中获取XML?

时间:2013-07-13 22:03:17

标签: android

在执行此任务时,我遵循http://www.androidhive.info/2011/11/android-xml-parsing-tutorial/中的XML解析教程 非常好的教程。对我来说,一个减号就是从URL中获取XML。我需要从R.raw文件夹中获取。我搜索了解决方案,找到了许多使用InputStream的解决方案(例如:Load local xml data in listview in android) 我已经放了一行代码

InputStream is = res.openRawResource(R.raw.localxmlfileName);

但它正在强调资源并给出错误:[res无法解决]。如何解决这个问题我是否正确行事?

2 个答案:

答案 0 :(得分:8)

对于XML,通常更好的选择是将文件放在res/xml/中,然后通过调用XmlPullParser获取该XML的getResources().getXml()XmlPullParser允许您通过XML事件(新文档,新元素等)工作,并阅读您需要的内容。

例如,给定res/xml/words.xml这样:

<words>
  <word value="lorem" />
  <word value="ipsum" />
  <word value="dolor" />
  <word value="sit" />
  <word value="amet" />
  <word value="consectetuer" />
  <word value="adipiscing" />
  <word value="elit" />
  <word value="morbi" />
  <word value="vel" />
  <word value="ligula" />
  <word value="vitae" />
  <word value="arcu" />
  <word value="aliquet" />
  <word value="mollis" />
  <word value="etiam" />
  <word value="vel" />
  <word value="erat" />
  <word value="placerat" />
  <word value="ante" />
  <word value="porttitor" />
  <word value="sodales" />
  <word value="pellentesque" />
  <word value="augue" />
  <word value="purus" />
</words>

你会把它们读成ArrayList<String>这样的(例如来自活动内部):

  ArrayList<String> items=new ArrayList<String>();
  XmlPullParser xpp=getResources().getXml(R.xml.words);

  while (xpp.getEventType()!=XmlPullParser.END_DOCUMENT) {
    if (xpp.getEventType()==XmlPullParser.START_TAG) {
      if (xpp.getName().equals("word")) {
        items.add(xpp.getAttributeValue(0));
      }
    }

    xpp.next();
  }

(那里也有一个try / catch块,但为了简单起见我将其修剪掉了)

优点是存储在res/xml/中的XML可以这种方式读取,比使用来自InputStream的{​​{1}}或来自普通文件的XML解析器快十倍。这是因为Google严格优化了从已知存放XML(res/raw/res/xml/等)的资源目录中读取XML的行为,部分原因是将XML预编译为“二进制XML”格式作为构建过程的一部分。

缺点是较少的开发人员熟悉res/layout/

答案 1 :(得分:1)

res似乎是一个资源变量。您需要先获取资源。尝试使用类似的东西:

InputStream is = getResources().openRawResource(R.raw.localxmlfileName);