Android 开发中使用SAX解析xml小结
2012-04-19 17:56
423 查看
1. 解析类: 继承和重写DefaultHandler 。
import java.util.ArrayList; import java.util.List; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import android.util.Log; public class EmployeeHandler extends DefaultHandler { private static final String TAG = "xml"; private List<Employee> data; private Employee employee; private String preTAG; private static final String _Employee="Employee"; private static final String _name="name"; private static final String _time="SignInTime"; private static final String _phoneNumber = "phoneNumber"; public EmployeeHandler(List<Employee> data){ super(); this.data = data; } //解析文档头 @Override public void startDocument() throws SAXException {
//新建一个数组链表,元素为对象,用来存放xml解析到得数据 if(data==null) data=new ArrayList<Employee>(); Log.d(TAG, "startDocument ------- :"); super.startDocument(); } @Override public void endDocument() throws SAXException { Log.d(TAG, "endDocument ------- :"); super.endDocument(); } //文档结束标签 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { Log.d(TAG, "startElement ------- :localName :"+localName); preTAG = localName; if(_Employee.equalsIgnoreCase(localName)){
//新建用来存储标签之间的值的对象 employee=new Employee(); } super.startElement(uri, localName, qName, attributes); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { preTAG = ""; if(_Employee.equalsIgnoreCase(localName)){ data.add(employee); Log.d(TAG, "endElement ------- :һ "); } super.endElement(uri, localName, qName); } //主要解析放在这里 @Override public void characters(char[] ch, int start, int length) throws SAXException { String info = new String(ch,start,length); Log.d(TAG, "characters ------- : property value : " +info);
//将标签中之间的值存入对象字段 if(preTAG.equalsIgnoreCase(_name)){ employee.setName(info); } else if (preTAG.equalsIgnoreCase(_phoneNumber)) { employee.setPhoneNumber(info); }else if(preTAG.equalsIgnoreCase(_time)){ employee.setTime(info); } super.characters(ch, start, length); } public List<Employee> getdata(){ return data; } }
2.EmployeeXmlHelper类:
封装了解析所需的前置、后置处理逻辑成工具类,方便调用。
import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; public class EmployeeXmlHelper { public static List<Employee> parserXML(String str){ if(null == str){ return null; } String _str = str.trim(); List<Employee> data = new ArrayList<Employee>(); SAXParserFactory factory=SAXParserFactory.newInstance(); XMLReader reader; try { byte[] bytes = _str.getBytes(); ByteArrayInputStream bis = new ByteArrayInputStream (bytes); InputSource is = new InputSource( (InputStream)bis); is.setEncoding("utf-8"); reader = factory.newSAXParser().getXMLReader(); reader.setContentHandler(new EmployeeHandler(data)); reader.parse(is); } catch (Exception e) { e.printStackTrace(); } return data; } }3.model类
package com.swift.phoneAttendance.model;import java.io.Serializable;public class Employee implements Serializable {String name = null;String phoneNumber = null;String time = null;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}}
4.客户端调用方式:
xml内容如下:
<<Result><Status>True<Status><Employee> <Name></Name> <PhoneNumber></PhoneNumber> </ Employee><Employee></ Result>
调用解析:
private List<Employee> data = EmployeeXmlHelper.parserXML(xml);
相关文章推荐
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager2、其中小点的图片用一个selector来控制颜色,point.xml:现欢迎引导页面
- 【Android开发】用户界面设计-使用XML和Java代码混合控制UI界面
- Android下使用TinyXml读取xml配置文件(Cocos2d-x游戏开发)
- 腾讯开发平台QQ登陆授权(Android_SDK_V3.1.0使用小结)
- Android使用SAX解析XML
- android开发中eclipse里xml开发的自动提示和使用帮助快捷键提示
- Android解析XML方式(一)使用SAX解析
- android开发(34) 自定义 listView的分割线( 使用xml drawable画多条线)
- Android下使用TinyXml读取xml配置文件(Cocos2d-x游戏开发)
- Android中的XML解析-DOM的使用与开发技巧
- Android开发之下载Tomcat服务器的xml文件并使用SAX解析
- android-pulltorefesh快速开发框架的使用小结
- android开发:Android 中自定义属性(attr.xml,TypedArray)的使用
- 关于Android开发中使用的XML
- Android开发——Protocol Buffer的使用(比XML、Json快很多)
- Android使用SAX解析XML(4)
- android学习二十二(使用SAX解析xml)
- android开发中eclipse里xml开发的自动提示和使用帮助快捷键提示
- Android解析XML方式(一)使用SAX解析
- android开发之Notification结合PendingIntent使用小结