我将本地XML文件放入res/raw
,然后将其加载到InputStreamer
对象中。它工作正常,我能够解析其内容。
当我将相同的XML放入res/xml
时,我会XmlPullParserException
说它无法找到START标记。
我使用此代码填充InputStream
对象:
InputStream is = getResources().openRawResource(R.raw.data);
此行从/res/xml
加载XML:
InputStream is = context.getResources().openRawResource(R.xml.data);
为什么会这样?如果第二种方法是错误的,那么res/xml
的目的是什么?
答案 0 :(得分:0)
getXML()
未返回InputStream
,因此我不确定您的代码是如何编译的。它返回XMLResourceParser
。
http://developer.android.com/reference/android/content/res/Resources.html#getXml(int)
返回一个XmlResourceParser,通过它可以读取给定资源ID的通用XML资源。
/res/xml
的目的是存储XML并稍后解析它的一个方便的地方!有时您不需要InputStream
:)
答案 1 :(得分:0)
你可以这样读:
void parseXml(int xmlId){
Resources res = context.getResources();
//Xml parserer
XmlResourceParser parser = res.getXml(xmlResource);
while (parser.next() != XmlPullParser.END_DOCUMENT) {
//A start tag is reached
if(parser.getEventType() == XmlPullParser.START_TAG){
//Which tag is
if(parser.getName().equalsIgnoreCase("Name"){
//Do something when a <Name> tag is reached
//and so on ...
}
}
}
}