对于 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”格式作为构建过程的一部分。InputStream
res/raw/
res/xml/
res/layout/
缺点是熟悉的开发人员较少XmlPullParser
。