SAXParser与本地XML文件

时间:2011-05-10 10:10:47

标签: android xml-parsing saxparser

我已经阅读了几个关于如何读取本地XML文件的主题。

他们中的大多数人都在使用openRawResource()。然而,与getXML()相比,它要慢得多。

我想在我的项目中使用getXML,因为SAX InputSource不接受XmlResourceParser作为参数,所以可以使用getXML和XMLReader.parse()。

编辑: btw,什么时候会调用startElement endElement?它是在XMLReader.parse之后吗?当我读取某个属性值时,是否可以从顶部重新启动解析?

非常感谢

3 个答案:

答案 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>