如何使用pull解析器解析位于assets文件夹中的本地XML文件?我无法使pull解析器正常工作,它总是抛出一个IO异常。我认为我可能无法获取文件路径或连接到文件。
如何使用pull解析器解析位于assets文件夹中的本地XML文件?我无法使pull解析器正常工作,它总是抛出一个IO异常。我认为我可能无法获取文件路径或连接到文件。
mixm,
我一直在尝试各种方法从“assets”和“res”中加载本地文件,但为了回答你所问的问题(因为似乎没有其他人这样做),首先,请确保在测试之前XML是有效的,或者关闭验证,您可以同时执行此操作并实例化一个Pull解析器:
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setValidating(false);
XmlPullParser myxml = factory.newPullParser();
然后打开XML文件,并将其设置为您的拉解析器的输入:
InputStream raw = getApplicationContext().getAssets().open("simple.xml");
myxml.setInput(raw, null);
现在设置你的拉取循环(或其他方式,这取决于你是否想要进行延迟拉取,这是你的设计决策):
int eventType = myxml.getEventType();
while(eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_DOCUMENT) {
Log.d(MY_DEBUG_TAG, "In start document");
}
else if(eventType == XmlPullParser.START_TAG) {
Log.d(MY_DEBUG_TAG, "In start tag = "+myxml.getName());
}
else if(eventType == XmlPullParser.END_TAG) {
Log.d(MY_DEBUG_TAG, "In end tag = "+myxml.getName());
}
else if(eventType == XmlPullParser.TEXT) {
Log.d(MY_DEBUG_TAG, "Have text = "+myxml.getText());
}
eventType = myxml.next();
}
} catch (XmlPullParserException e) {
注意myxml.getEventType()
,需要执行此操作以启动解析并处理正在提取的事件类型。 注意:为了更易读而省略了catch块。
已在2.1上测试以上内容,希望对您有所帮助。 -Frank