Java之SAX解析XMl文件
2016-04-12 22:07
423 查看
SAX 解析XML文档
SAX解析XMl相比于DOM,SAX是一种速度更快更有效的方法,它逐行及进行扫描,SAX既是一个接口.作为接口SAX是事件驱动型XMl解析的一个标准接口创建一个类继承与DefaultHandler类
1 :创建list集合用于返回对象的集合
2 :创建一个用解析的标签,用用于记录获取的内容
3 :创建本类对象
4 :重写
startDocument(),
startElement(),
endElement(),
characters();
在解析元素的时候设置id ,并把qName赋值给parTag
在解析元素结束的时候把parTag清空
在解析文本的方法中,判断parTag不为空时设置对象的name,email,address,group,并添加对象到集合中
测试方法
1: 获取SAXParser对象
SAXParserFactory.new Instance().new SAXParser();
2:调用parse() 解析xml文件
void parse(File f,DefaultHandler dh)
3:输出结果集
代码
package com.it._04.sax; import java.io.File; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import lombok.Data; import org.junit.Test; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; @Data public class SAXParse extends DefaultHandler { private String name; private String email; private String address; private String group; private int id; private SAXParse con; private List<SAXParse> list; private String parTag; public void startDocument() throws SAXException { super.startDocument(); list = new ArrayList<>(); } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); if ("linkman".equals(qName)) { con = new SAXParse(); Integer id = Integer.valueOf(attributes.getValue(0)); con.setId(id); } parTag = qName; } public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); parTag = null; } public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); if (parTag != null) { if ("name".equals(parTag)) { con.setName(new String(ch, start, length)); } else if ("email".equals(parTag)) { con.setEmail(new String(ch, start, length)); } else if ("address".equals(parTag)) { con.setAddress(new String(ch, start, length)); } else if ("group".equals(parTag)) { con.setGroup(new String(ch, start, length)); list.add(con); } } } @Test public void testSax() throws Exception { SAXParser fac = SAXParserFactory.newInstance().newSAXParser(); SAXParse dh = new SAXParse(); fac.parse(new File(contacts.xml"), dh); System.out.println(dh.getList()); }
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序