xml文档的pull解析与SAX解析
来源:互联网 发布:网络哪个国家强 编辑:程序博客网 时间:2024/05/19 18:48
一、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(newSAXHandler());
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(); }}
- xml文档的pull解析与SAX解析
- Android SAX,DOM,PULL解析XML文档
- XML使用SAX解析与PULL解析的区别
- XML的Pull解析、SAX解析
- SAX PULL 解析xml
- Dom sax pull解析xml的差异
- sax、dom、pull解析xml
- SAX、DOM、PULL解析XML
- Dom Sax Pull解析xml
- sax、dom、pull解析xml
- sax、dom、pull解析xml
- sax dom pull 解析xml
- 解析XML:DOM、SAX、PULL
- Xml解析(SAX & Pull)
- DOM、SAX、Pull解析XML
- pull,sax,dom解析XML
- 解析XML:DOM,SAX,PULL
- xml解析pull sax doc
- Java学习第十三天
- WebView设置透明,滚动时有黑影,加载图片
- C#封装数据
- Android序列化:Serializable和Parcelable
- Linux下线程详解
- xml文档的pull解析与SAX解析
- 8大常用通讯中间件/MQ使用总结
- Codeforces 835D-Palindromic characteristics
- AngularJS入门-(1)
- Informatica基础系列(零)——前言
- Codeforces835C Star sky
- JDK-数据操作
- 应用OpenCV检测自定义目标
- HTML5新特性之Web Notifications