我已经阅读了几个关于如何读取本地XML文件的主题。
他们中的大多数人都在使用openRawResource()。然而,与getXML()相比,它要慢得多。
我想在我的项目中使用getXML,因为SAX InputSource不接受XmlResourceParser作为参数,所以可以使用getXML和XMLReader.parse()。
编辑: btw,什么时候会调用startElement endElement?它是在XMLReader.parse之后吗?当我读取某个属性值时,是否可以从顶部重新启动解析?
非常感谢
答案 0 :(得分:2)
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
MyXMLHandler myXMLHandler = new MyXMLHandler(getApplicationContext());
reader.setContentHandler(myXMLHandler);
reader.parse(new InputSource(getAssets().open("Getalloffersbyzipcoderesponse_xml.xml")));
// listView.setAdapter(new EventListAdapter(getApplicationContext(), 0, myXMLHandler.getEventList()));
listView.setAdapter(new OffersListAdapter(getApplicationContext(), 0, myXMLHandler.getOffersList()));
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 1 :(得分:1)
您可以使用它(假设您将xml保留在assets文件夹中)
InputStream response=context.getAssets().open("your.xml");
然后
Xml.parse(response, Xml.Encoding.UTF_8,rootElement.getContentHandler());
答案 2 :(得分:0)
如果你想使用'getXML()' - 函数,你可以查看本教程,其中展示了如何使用'XmlResourceParser' - 界面:Link
如果你将XML文件放在'openRawResource' - 方法中,它会返回一个给定资源ID的'InputStream',然后你可以传递给普通的'SAXParser'。 / p>