Android 开发工具类 21_SAXForHandler
解析 XML 有两种形式:
1、XMLReader
XMLReaser xmlReader = saxParser.getXMLReader();
xmlReadeer.setContentHandler(hangdler);
xmlREader.pase(new InputSource(is));
2、SAXParser
saxParser.parse(is, handler);
其实 SAXParser 是 JAXP(Java API for XML Processing) 对 XMLReader 的一个封装。
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; import com.wangjialin.domain.Person; public class SAXForHandler extends DefaultHandler { private static final String TAG = "SAXForHandler";
private List<Person> persons;
private String perTag ; // 通过此变量,记录前一个标签的名称。
Person person; // 记录当前 Person public List<Person> getPersons() {
return persons;
} // 适合在此事件中触发初始化行为。
public void startDocument() throws SAXException {
persons = new ArrayList<Person>();
Log.i(TAG , "***startDocument()***");
} public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException { if("person".equals(localName)){
for ( int i = 0; i < attributes.getLength(); i++ ) {
Log.i(TAG ,"attributeName:" + attributes.getLocalName(i)
+ "_attribute_Value:" + attributes.getValue(i));
person = new Person();
person.setId(Integer.valueOf(attributes.getValue(i)));
}
}
perTag = localName;
Log.i(TAG , qName+"***startElement()***");
} public void characters(char[] ch, int start, int length) throws SAXException { String data = new String(ch, start, length).trim();
if(!"".equals(data.trim())){
Log.i(TAG ,"content: " + data.trim());
}
if("name".equals(perTag)){
person.setName(data);
}else if("age".equals(perTag)){
person.setAge(new Short(data));
}
} public void endElement(String uri, String localName, String qName) throws SAXException { Log.i(TAG , qName + "***endElement()***");
if("person".equals(localName)){
persons.add(person);
person = null;
}
perTag = null;
} public void endDocument() throws SAXException { Log.i(TAG , "***endDocument()***");
}
}
Person.java
 package com.wangjialin.domain;
 public class Person {
     private Integer id;
     private String name;
     private Short age;
     public Person(){}
     public Person(Integer id, String name, Short age) {
         this.id = id;
         this.name = name;
         this.age = age;
     }
     public Person(String name, Short age) {
         this.name = name;
         this.age = age;
     }
     public Integer getId() {
         return id;
     }
     public void setId(Integer id) {
         this.id = id;
     }
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public Short getAge() {
         return age;
     }
     public void setAge(Short age) {
         this.age = age;
     }
     @Override
     public String toString() {
         return "id=" + id + ",name=" + name+ ",age=" + age;
     }
 }
JUnit 测试
 public void testSAXGetPersons() throws Throwable{
         InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wangjialin.xml");
         SAXForHandler saxForHandler = new SAXForHandler();
         // 获取 SAX 解析器的工厂对象
         SAXParserFactory spf = SAXParserFactory.newInstance();
         // 创建解析器对象
         SAXParser saxParser = spf.newSAXParser();
         // 设定解析的文件和自己定义的事件处理器对象
         saxParser.parse(inputStream, saxForHandler);
         List<Person> persons = saxForHandler.getPersons();
         inputStream.close();
         for(Person person:persons){
             Log.i(TAG, person.toString());
         }
     }
【参考】
http://blog.csdn.net/redarmy_chen/article/details/12951649

Android 开发工具类 21_SAXForHandler的更多相关文章
- Android开发工具类
		7种无须编程的DIY开发工具 你知道几个? 现如今,各种DIY开发工具不断的出现,使得企业和个人在短短几分钟内就能完成应用的创建和发布,大大节省了在时间和资金上的投入.此外,DIY工 具的出现,也帮助 ... 
- android开发工具类之获得WIFI IP地址或者手机网络IP
		有的时候我们需要获得WIFI的IP地址获得手机网络的IP地址,这是一个工具类,专门解决这个问题,这里需要两个权限: <uses-permission android:name="and ... 
- android开发工具类总结(一)
		一.日志工具类 Log.java public class L { private L() { /* 不可被实例化 */ throw new UnsupportedOperationException ... 
- Android 开发工具类 35_PatchUtils
		增量更新工具类[https://github.com/cundong/SmartAppUpdates] import java.io.File; import android.app.Activity ... 
- Android 开发工具类 13_ SaxService
		网络 xml 解析方式 package com.example.dashu_saxxml; import java.io.IOException; import java.io.InputStream ... 
- Android 开发工具类 06_NetUtils
		跟网络相关的工具类: 1.判断网络是否连接: 2.判断是否是 wifi 连接: 3.打开网络设置界面: import android.app.Activity; import android.cont ... 
- Android 开发工具类 03_HttpUtils
		Http 请求的工具类: 1.异步的 Get 请求: 2.异步的 Post 请求: 3.Get 请求,获得返回数据: 4.向指定 URL 发送 POST方法的请求. import java.io.Bu ... 
- Android 开发工具类 19_NetworkStateReceiver
		检测网络状态改变类: 1.注册网络状态广播: 2.检查网络状态: 3.注销网络状态广播: 4.获取当前网络状态,true为网络连接成功,否则网络连接失败: 5.注册网络连接观察者: 6.注销网络连接观 ... 
- Android 开发工具类 27_多线程下载大文件
		多线程下载大文件时序图 FileDownloader.java package com.wangjialin.internet.service.downloader; import java.io.F ... 
随机推荐
- cmd运行命令
			winver检查Windows版本 dxdiag检查DirectX信息 mem.exe显示内存使用情况 Sndvol32音量控制程序 sfc.exe系统文件检查器 gpedit.msc 组策略 reg ... 
- (连通图 模板题)迷宫城堡--hdu--1269
			链接: http://acm.hdu.edu.cn/showproblem.php?pid=1269 http://acm.hust.edu.cn/vjudge/contest/view.action ... 
- Resharper 修改命名空间
			1. 使用Reshared 右键->Refactor->Rename 修改所有文件的命名空间(鼠标移动到对应类的命名空间) 2.修改类库中的命名空间 包括程序集信息 右键->属性 3 ... 
- win7系统窗口背景颜色设置为护眼色的方法---打开的任意窗口显示为护眼色,程序眼必备
			win7系统窗口背景颜色设置为护眼色的方法 1. 打开"窗口颜色与外观"对话框 方法1:从控制面板开始 控制面板\外观和个性化\个性化\窗口颜色和外观 方法2:桌面上鼠标右键,个性 ... 
- LoadRunner 技巧之 IP欺骗 (推荐)
			IP欺骗也是也loadrunner自带的一个非常有用的功能. 需要使用ip欺骗的原因:1.当某个IP的访问过于频繁,或者访问量过大是,服务器会拒绝访问请求,这时候通过IP欺骗可以增加访问频率和访问量, ... 
- Sublime Text 3 格式化HTML CSS JS 代码
			一,首先通过ctrl+shift+p 要等一会就会出现插件安装界面 二,在插件安装输入框,输入:HTML-CSS-JS Prettify 并安装该插件 三,如果没有装nodejs, 下载nodejs ... 
- 在Azure DevOps Server (TFS) 中修改团队项目名称
			概述 [团队项目]: 在Azure DevOps Server (原名TFS)中,团队项目(Team Project)是一个最基本的数据组织容器,包含了一个团队或者信息系统中的所有信息,包括源代码.文 ... 
- NetCore入门篇:(九)Net Core项目使用Session及用Redis做分布式
			一.简介 1.因为Net Core默认是没有启动Session功能的,如果需要使用,需要通过代码开启. 2.本篇说明如果启用默认Session实现,即Session存到内存中. 3.本篇扩展说明如何用 ... 
- C# DataTable导出EXCEL后身份证、银行卡号等长数字信息显示乱码解决
			在DataTable导出EXCEL后发现有些格式显示有问题,比如身份证.银行卡号等大于11位的数字显示为科学计数法.13681-1等 带中划线的两段数字显示为日期格式等. 处理方法如下: public ... 
- C#穿透session隔离———Windows服务启动UI交互程序
			在Windows服务里面启动其他具有界面的应用程序,需要穿透session隔离,尝试了很多种方法,都可行,现在一一列举下来,并写下几个需要注意的地方. 需要注意的地方 首先要将服务的Account属性 ... 
