package com.andy.android.saxtest;
import java.util.ArrayList;
import java.util.List;
import com.andy.android.domain.Person;
import java.io.InputStream;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SAXxml {
/*
* 解析后返回person的list结构
* @param 输入流,xml 文件的输入流
* */
public List<Person> getPerson(InputStream inputstream) throws Throwable{
//获得解析器工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//从解析器工厂new一个解析器
SAXParser parse = factory.newSAXParser();
PersonHandle perHandle = new PersonHandle();
//解析输入流,解析类使用perHandle类
parse.parse(inputstream, perHandle);
//返回所解析的结果
return perHandle.getPersons();
}
}
/**
*
* @author bluesky
* @function: 定义PersonHandle类,该类继承自DefaultHandle类,解析器在处理输入流的时候遇到相应的字段会自动触发该类中的一些事件。
*
*/
class PersonHandle extends DefaultHandler{
List<Person> persons = null;
private String preTag = null;
private Person person = null;
/**
*
* @return 返回person的列表
*/
public List<Person> getPersons(){
return persons;
}
/**
* 重载函数,解析器遇到文本时自动解析
* @param ch :字符串,
* @param start :字符串的起始部分
* @param length:字符串的长度
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//如果某个文本前面的标签不为空,证明改文本是我们所关注的。
if(preTag!=null){
//获取文本字符串
String tempData = new String(ch,start,length);
//如果文本前面的标签是name,表明该字段的值是name,是我们需要提取的值
if("name".equals(preTag)){
person.setName(tempData);
}
//如果文本前面的标签是age,表明该字段的值是age,是我们需要提取的值
else if("age".equals(preTag)){
person.setAge(new Short(tempData));
}
}
}
/**
* 文档解析完成,我们不关心这块的值
*/
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
}
/**
* 元素解析完成时自动触发该函数
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
//如果一个person解析完成之后,需要将保存在person 的值add 到List<Person> 里面去。并清空临时的person内容准备为下一次解析做准备。
if("person".equals(localName)){
persons.add(person);
person = null;
}
preTag = null;//恢复初始化
}
@Override
public void startDocument() throws SAXException {
//在文档开始的时候触发该函数,此时我们new一个people的list
persons = new ArrayList<Person>();
}
/**
* 遇到解析元素的时候会自动调用该函数
* @param uri :命名空间。
* @param localName 元素的名字
* @param qName :带命名空间的元素名字。
* @param attributes :属性名
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//如果第一个元素名为person的话,new一个person,表明遇到一个新的person需要解析了
if("person".equals(localName)){
person = new Person();
//首先获取属性,并设置属性。
Integer id = new Integer(attributes.getValue(0));
person.setId(id);
}
//记录下前一个标签的值,方便在后面的文本解析的时候知道解析的是什么字段。
preTag = localName;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Android 中利用SAX ,Dom,pull解析 XML 文件代码

共32个文件
class:11个
java:6个
xml:5个

需积分: 9 15 下载量 129 浏览量
2011-12-18
22:31:01
上传
评论
收藏 58KB RAR 举报
温馨提示
Android 中利用SAX ,Dom,pull解析 XML 文件代码 每种方式都介绍了代码,具体的文档在个人博客: http://blog.csdn.net/blueskydyliu/article/details/7055311 中介绍了。
资源详情
资源评论
资源推荐
收起资源包目录
































































共 32 条
- 1


























blueskydyliu
- 粉丝: 16
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 国家开放大学电大《数据结构》网络课形考任务3作业及答案.docx
- 全国计算机等级考试二级C语言笔试高频考点.ppt
- 宇龙数控加工仿真软件使用手册.doc
- 介绍机械设计制造及自动化.ppt
- 装饰装修工程项目管理流程图样本.doc
- 国培计划示范性网络研修与校本研修整合培训项目实施方案解析.doc
- 色彩学入门专业教程(色彩原理photoshop入门必备).ppt
- 网络技术第二章网络技术基础样本.doc
- 高级人民法院大楼网络系统设计方案.doc
- 网络营销在我国中小企业应用中的问题分析.doc
- “互联网+”时代下提升教师信息素养的策略.doc
- 网络计划技术在施工进度控制中的应用.pdf
- 广安气田通信施工组织设计模板.doc
- 基于PLC的五层电梯控制系统的设计.doc
- 机电系统安全质量标准化标准及考核评级办法.doc
- 基于超高频法的GIS局放警报系统的设计本科毕业设计说明.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论0