Android解析XML 格式的数据
来源:互联网 发布:农资连锁软件 编辑:程序博客网 时间:2024/06/05 16:47
2种解析方式Pull解析方式:
首先要获取到一个
XmlPullParserFactory 的实例, 并借助这个实例得到XmlPullParser 对象, 然后调用
XmlPullParser 的setInput()方法将服务器返回的XML 数据设置进去就可以开始解析了。解析
的过程也是非常简单,通过getEventType()可以得到当前的解析事件,然后在一个while 循环
中不断地进行解析,如果当前的解析事件不等于XmlPullParser.END_DOCUMENT,说明解
析工作还没完成,调用next()方法后可以获取下一个解析事件。
private void parseXMLWithPull(String xmlData) {try {XmlPullParserFactory factory = XmlPullParserFactory.newInstance();XmlPullParser xmlPullParser = factory.newPullParser();xmlPullParser.setInput(new StringReader(xmlData));int eventType = xmlPullParser.getEventType();String id = "";String name = "";String version = "";while (eventType != XmlPullParser.END_DOCUMENT) {String nodeName = xmlPullParser.getName();switch (eventType) {// 开始解析某个结点case XmlPullParser.START_TAG: {if ("id".equals(nodeName)) {id = xmlPullParser.nextText();} else if ("name".equals(nodeName)) {name = xmlPullParser.nextText();} else if ("version".equals(nodeName)) {version = xmlPullParser.nextText();}break;}// 完成解析某个结点case XmlPullParser.END_TAG: {if ("app".equals(nodeName)) {Log.d("MainActivity", "id is " + id);Log.d("MainActivity", "name is " + name);Log.d("MainActivity", "version is " + version);}break;}default:break;}eventType = xmlPullParser.next();}} catch (Exception e) {e.printStackTrace();}}2SAX解析方式
startDocument()方法会在开始XML 解析的时候调用,
startElement()方法会在开始解析某个结点的时候调用,characters()方法会在获取结点中内容
的时候调用,endElement()方法会在完成解析某个结点的时候调用,endDocument()方法会在
完成整个XML 解析的时候调用。其中,startElement()、characters()和endElement()这三个方
法是有参数的,从XML 中解析出的数据就会以参数的形式传入到这些方法中。需要注意的
是,在获取结点中的内容时,characters()方法可能会被调用多次
public class ContentHandler extends DefaultHandler {private String nodeName;private StringBuilder id;private StringBuilder name;private StringBuilder version;@Overridepublic void startDocument() throws SAXException {id = new StringBuilder();name = new StringBuilder();version = new StringBuilder();}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {// 记录当前结点名nodeName = localName;}@Overridepublic void characters(char[] ch, int start, int length) throwsSAXException {// 根据当前的结点名判断将内容添加到哪一个StringBuilder对象中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);}}@Overridepublic void endElement(String uri, String localName, String qName) throwsSAXException {if ("app".equals(localName)) {Log.d("ContentHandler", "id is " + id.toString().trim());Log.d("ContentHandler", "name is " + name.toString().trim());Log.d("ContentHandler", "version is " + version.toString().trim());// 最后要将StringBuilder清空掉id.setLength(0);name.setLength(0);version.setLength(0);}}@Overridepublic void endDocument() throws SAXException {}}
private void parseXMLWithSAX(String xmlData) {try {SAXParserFactory factory = SAXParserFactory.newInstance();XMLReader xmlReader = factory.newSAXParser().getXMLReader();ContentHandler handler = new ContentHandler();// 将ContentHandler的实例设置到XMLReader中xmlReader.setContentHandler(handler);// 开始执行解析xmlReader.parse(new InputSource(new StringReader(xmlData)));} catch (Exception e) {e.printStackTrace();}}
0 0
- Android解析XML 格式的数据
- android解析xml格式数据
- Android 解析XML格式数据
- 解析XML格式的数据
- Android解析数据—XML格式数据
- Android 开发实践 解析XML和JSON格式的数据
- Android中的xml、json格式数据解析
- Android解析xml和json格式数据
- Android中的xml、json格式数据解析
- Android中的xml、json格式数据解析
- Android中的xml、json格式数据解析
- 解析XML格式数据
- 解析XML格式数据
- 解析XML格式数据
- 解析XML格式数据
- 解析XML格式数据
- xml格式数据解析
- 解析XML格式数据
- 用Swift一步步教你封装--AFNetworking
- Visual Studio2010中动态生成注释中的时间__使用宏命令
- android之通过USB插拔流程来了解android UEvent
- sh 软连接的一些操作
- 微信小程序开发之——wx.showToast(OBJECT)的使用
- Android解析XML 格式的数据
- JDK1.5新特性6-互斥锁
- ubuntu16 + jdk8 + hadoop2.7 安装
- Python入门——切片操作
- 队列的模拟实现
- 第一篇博客,简单介绍RecyclerView的应用
- iOS网络请求工具oc版,swift版基于AFNetworking的简单封装
- PyQt4编写界面的两种方式
- 使用CocoaPods For Mac