XML解析之sax解析案例(二)使用sax解析把 xml文档封装成对象
Demo1类:
import java.io.File;
import java.util.List; import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; /**
* 使用sax解析把 xml文档封装成对象
* @author APPle
*
*/
public class Demo3 { public static void main(String[] args)throws Exception {
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
MyDefaultHandler3 handler = new MyDefaultHandler3();
parser.parse(new File("./src/contact.xml"), handler);
List<Contact> list = handler.getList();
for (Contact contact : list) {
System.out.println(contact);
}
}
}
MyDefaultHandler3类:
import java.util.ArrayList;
import java.util.List; import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* SAX处理程序
* @author APPle
*
*/
public class MyDefaultHandler3 extends DefaultHandler {
//存储所有联系人对象
private List<Contact> list = new ArrayList<Contact>(); public List<Contact> getList(){
return list;
}
//保存一个联系人信息
private Contact contact;
/**
* 思路:
* 1)创建Contact对象
* 2)把每个contact标签内容存入到Contact对象
* 3)把Contact对象放入List中
*/
//用于临时存储当前读到的标签名
private String curTag;//用于方法跨度使用变量。 @Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
curTag = qName;
//读取到contact的开始标签创建Contact对象,这里说明了什么时候创建Content对象最合适。
if("contact".equals(qName)){
contact = new Contact(); //设置id值
contact.setId(attributes.getValue("id"));//根据指定名字获取id值
}
} @Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//当前文本内容
String content = new String(ch,start,length);//String类构造方法获取到当前文本的额内容。 if("name".equals(curTag)){
contact.setName(content);
} if("age".equals(curTag)){
contact.setAge(content);
} if("phone".equals(curTag)){
contact.setPhone(content);
} if("email".equals(curTag)){
contact.setEmail(content);
} if("qq".equals(curTag)){
contact.setQq(content);
}
} @Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
//结束标签后就设置null。这里设置为null很重要。设置空是为了避免空格换行设置到对象的属性中,空格换行进去了就把原来放进去的数据覆盖掉。
curTag = null;
//读到Contact的结束标签把content对象放入List中
if("contact".equals(qName)){
list.add(contact);
}
}
}
XML解析之sax解析案例(二)使用sax解析把 xml文档封装成对象的更多相关文章
- Lucene7.2.1系列(二)luke使用及索引文档的基本操作
系列文章: Lucene系列(一)快速入门 Lucene系列(二)luke使用及索引文档的基本操作 Lucene系列(三)查询及高亮 luke入门 简介: github地址:https://githu ...
- java将XML文档转换成json格式数据
功能 将xml文档转换成json格式数据 说明 依赖包:1. jdom-2.0.2.jar : xml解析工具包;2. fastjson-1.1.36.jar : 阿里巴巴研发的高性能json工具包 ...
- 【转】(二)unity4.6Ugui中文教程文档-------概要-UGUI Canvas
原创至上,移步请戳:(二)unity4.6Ugui中文教程文档-------概要-UGUI Canvas UI系统允许您快速.直观地创建用户界面(Ui).这是Unity的新 UI 系统的主要功能介绍. ...
- Qt应用程序主窗口之二:拖放操作与打印文档
一.拖放操作 对于一个实用的应用程序,不仅希望能从文件菜单中打开一个文件,更希望可以通过拖动直接将桌面上的文件拖入程序界面上来打开,就像可以将.pro文件拖入Creator中来打开整个项目一样.Qt中 ...
- poi解析word文档转换成html(包括图片解析)
需求:将本地上传的word文档解析并放入数据库中 代码: import java.io.ByteArrayOutputStream;import java.io.File;import java.io ...
- python3 生成二维码并存入word文档
#二维码的制作与解析 import qrcode,zxing,os s='https:////www.baidu.com/' res=qrcode.make(data=s) res.show() re ...
- Citrix 服务器虚拟化之二十八 XenApp6.5发布文档内容
Citrix 服务器虚拟化之二十八 XenApp 6.5发布文档内容 XenApp可发布以下类型的资源向用户提供信息访问,这些资源可在服务器或桌面上虚拟化: 1) 服务器桌面:发布场中服务器的整个 ...
- 在Sql Server 2005中将主子表关系的XML文档转换成主子表“Join”形式的表
本文转载:http://www.cnblogs.com/Ricky81317/archive/2010/01/06/1640434.html 最近这段时间在Sql Server 2005下做了很多根据 ...
- 【HighCharts系列教程】二、Highcharts结构及API文档
一.你必须知道的 1.首先,HighCharts是基于Jquery框架开发的,所以需要在页面引入Jquery,具体代码是: <script type="text/javascript& ...
随机推荐
- vue拦截器实现统一token,并兼容IE9验证
项目中使用vue搭建前端页面,并通过axios请求后台api接口,完成数据交互.如果验证口令token写在在每次的接口中,也是个不小的体力活,而且也不灵活.这里分享使用vue自带拦截器,给每次请求的头 ...
- Android编译安装失败解决办法
今天用AndroidStudio开发了一个手机App玩玩,但是偶然遇到一个问题,自己手机上测试得劲的很,分享给朋友做测试,但是nie,意外出现了.... 两个人都给我说个安装失败,这个就比较尴尬了,找 ...
- vue.js-路由
1:编写router.js import Router from "vue-router" import Vue from "vue" import rou ...
- SAS中常见的数组函数
SAS中常见的数组函数有: dim dimk hbound hboundk lbound lboundk 数组函数计萁数组的维数.上下界,有利于写出可移植的程序,数组函数包括:dim(x) 求数组x第 ...
- Bootstrap3 表格-条纹状表格
通过 .table-striped 类可以给 之内的每一行增加斑马条纹样式. 跨浏览器兼容性 条纹状表格是依赖 :nth-child CSS 选择器实现的,而这一功能不被 Internet Explo ...
- win2008r2 AD用户账户的批量导入方法
win2008r2 AD用户账户的批量导入方法 http://www.jb51.net/article/38423.htm
- [OpenCV]在显示窗口中截图
[OpenCV]在显示窗口中截图 简介 介绍使用OpenCV实现简单的截图功能.首先阐述实现此功能的基本步骤,然后给出实现代码,最后贴出实验结果以及遇到的问题. 基本步骤 我们需要知道OpenCV使用 ...
- 本人正竞选CSDN博客之星,欢迎各位来访的朋友能为我投上一票
投票网址:http://blog.csdn.net/vote/candidate.html?username=morixinguan&from=timeline 谢谢各位!
- [django] 利用多线程增加异步任务
看到django异步大家的反应应该是celery这种消息队列组件,现在用的最多的最推荐的也是这种方式.然而我这需求就是请求来了,执行一个小程序,但是又不能确定这个小程序啥时候执行完,响应又要及时,丢给 ...
- Android之触摸手势检测GestureDetector使用详解
在Android中,当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing,onSingleTapConfirmed(单击),onDoubleTap(双击)等等. 一般情 ...