繁体   English   中英

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

[英]How to get XML from local res/raw folder?

在执行此任务时,我遵循了http://www.androidhive.info/2011/11/android-xml-parsing-tutorial/的 XML解析教程。 对我来说,要减去的是从URL中获取XML。 我需要从R.raw文件夹中提取。 我搜索了解决方案,发现了许多使用InputStream的解决方案(例如: 在android的listview中加载本地xml数据

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

但这突出了资源并给出了错误:[资源无法解决]。 如何解决这个问题,我走对了吗?

对于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的速度比从res/raw/或纯文件中在InputStream上使用XML解析器的速度快大约十倍。 那是因为Google认真地优化了从已知保存XML的资源目录( res/xml/res/layout/等)中读取XML的行为,部分是通过将XML预编译为“二进制XML”格式来实现的构建过程。

缺点是很少有开发人员熟悉XmlPullParser

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM