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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 美林盖子打不开怎么办 美林瓶盖打不开怎么办 泰诺瓶盖打不开怎么办 玻璃罐头瓶盖打不开怎么办 塑料罐头瓶盖打不开怎么办 喷笔壶盖打不开怎么办 陶瓷壶盖卡住了怎么办 贝德玛瓶盖摔坏怎么办 塑料盖子错位拧不开怎么办 安全瓶盖坏了怎么办 刚买面霜打不开怎么办 可乐瓶盖鼓起来怎么办 暖壶塞子吸住了怎么办 茶兀瓶盖打不开怎么办 水杯盖太紧了拧不开怎么办 矿泉水瓶盖拧不开了怎么办 弩弦用手拉不上怎么办 茅台酒瓶口漏酒怎么办 化妆品盖子丢了怎么办 化妆品盖子碎了怎么办 自制水泵压力小怎么办 大学数学不会做怎么办 下雪了怎么办教案幼儿园小班 下水道被混凝土堵塞怎么办 日本足贴丢了胶布怎么办 牙齿被可乐腐蚀怎么办 三十岁满嘴无牙怎么办 水乳盖子打不开怎么办 蜂蜜罐子打不开了怎么办 蜂蜜盖子第二次拧不开怎么办 玻璃杯子拧不开盖子怎么办 玻璃杯水杯盖子拧不开怎么办 鞋子蝴蝶结掉了怎么办 蝴蝶翅膀受伤了怎么办 手被割了个口子怎么办 致炫方向盘重怎么办 黑檀7打不透怎么办 乒乓球底板太轻怎么办 狙击精英4卡怎么办 鼠标点一下变两下怎么办 工程干完不给钱怎么办