[英]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.