一、Pull解析:
1.在java中的使用方法:
1)首先InputStream ins = this.getClass().getClassLoader().
getResourceAsStream("xxx.xml");获取到一个流对象
2)获取xml的解析工厂对象XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
3)通过解析工厂获取xml解析器XmlPullParser parser = factory.newPullParser();
4)绑定需要解析的xml文件以及设置解编码格式,应该与xml文件的编码格式一致parser.setInput(ins, "UTF-8");
5)获取解析指针指向的当前标签类型int type = parser.getEventType();
6)通过指针遍历xml文件while(type != XmlPullParser.END_DOCUMENT)在循环体内执行你需要的操作,别忘了执行完操作移动指针指向下一个标签parser.next()
2.在Android中的使用方法:Android中的解析器构造方式与java不同因为都封装好了
XmlPullParser xpp = Xml.newPullParser();其他的与java都一样
Android中的代码示例:
private void parseXMLwithPull(InputStream input) { try { XmlPullParser parser = Xml.newPullParser(); parser.setInput(input,"UTF-8"); int type = parser.getEventType(); String id = ""; String name = ""; String version = ""; while (type != XmlPullParser.END_DOCUMENT) { String nodeName = parser.getName(); switch (type) { case XmlPullParser.START_TAG: if ("id".equals(nodeName)) { id = parser.nextText(); } else if ("name".equals(nodeName)) { name = parser.nextText(); } else if ("version".equals(nodeName)) { version = parser.nextText(); } break; case XmlPullParser.END_TAG: if ("app".equals(nodeName)) { Log.i("zhangdi",id); Log.i("zhangdi",name); Log.i("zhangdi",version); } break; } type = parser.next(); } } catch (Exception e) { e.printStackTrace(); } }
二、SAX解析:
1.新建一个SAXHandler类继承DefaultHandler,重写startDocument(开始xml解析的时候调用)、endDocument(结束xml解析的时候调用)、startElement(解析某个节点的时候调用)、endElement(完成解析某个节点的时候调用)以及characters(获取节点内容的时候调用)这5个方法;
2.构建xml解析工厂XMLParserFactory factory = XMLParserFactory.newInstance();
3.通过解析工厂获取XMLReader reader = factory.newSAXParser.getXMLReader();
4.设置reader的解析handler reader.setContentHandler(new SAXHandler());
5.解析数据reader.parse();
Android示例代码:
1.SAXHandler:
public class SAXHandler extends DefaultHandler { private String nodeName; private StringBuilder id; private StringBuilder name; private StringBuilder version; @Override public void startDocument() throws SAXException { super.startDocument(); id = new StringBuilder(); name = new StringBuilder(); version = new StringBuilder(); } @Override public void endDocument() throws SAXException { super.endDocument(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); nodeName = localName; } @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); if ("app".equals(localName)) { Log.i("zhangdi",id.toString()); Log.i("zhangdi",name.toString()); Log.i("zhangdi",version.toString()); id.setLength(0); name.setLength(0); version.setLength(0); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); if ("id".equals(nodeName)) { id.append(ch, start, length); } else if ("name".equals(nodeName)) { name.append(ch, start, length); } else if ("version".equals(nodeName)) { version.append(ch, start, length); } } }
2.具体解析步骤:
private void parseXMLwithSAX(String string) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); XMLReader reader = factory.newSAXParser().getXMLReader(); SAXHandler handler = new SAXHandler(); reader.setContentHandler(handler); reader.parse(new InputSource(new StringReader(string))); } catch (Exception e) { e.printStackTrace(); } }