1

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

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

但它强调 res 并给出错误:[res can't be resolve]。如何解决这个问题,我走对了吗?

4

2 回答 2

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块,但为了简单起见,我把它删掉了)

优点是存储在 a 中的 XML可以通过这种方式读取,比在from或普通文件中res/xml/使用 XML 解析器快十倍。这是因为 Google 认真优化了从已知保存 XML( 、 等)的资源目录中读取 XML 的行为,部分是通过将 XML 预编译为“二进制 XML”格式作为构建过程的一部分。InputStreamres/raw/res/xml/res/layout/

缺点是熟悉的开发人员较少XmlPullParser

于 2013-07-13T22:29:48.047 回答
1

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

InputStream is = getResources().openRawResource(R.raw.localxmlfileName);
于 2013-07-13T22:06:47.993 回答