XML读写之SAX
2016-02-15 10:37
429 查看
本文先使用SAX方式写一个简单地小例子,亲测可以运行,然后在末尾分析其优缺点。
新建一个Java类名称为SAXTest.java
新建一个Java类名称为BeanListHandler.java
新建一个xml文件,名称为student.xml,内容如下:
由于是Maven工程,所有xml都存放在src/main/resources下面
XML读写类:SAXTest.java
Handler类:BeanListHandler.java
2.SAX分析器提供的是一种对XML文档的顺序访问机制,对于已经分析过的部分,不能再倒回去重新处理。
3.由于SAX分析器实现简单,对内存要求比较低,因此实现效率比较高同时具有广泛的应用价值。
优点:
1.无需将整个文档加载到内存,因而内存消耗少。
缺点:
1.没有内置的文档导航支持 。
2.不能够随机访问XML文档 。
3.不支持在原地修改XML。
4.不支持名字空间作用域。
5.最适合于只从XML读取数据的应用程(不可用于操作或修改XML文档)。
参考
sax,dom,jdom的优缺点比较
1.准备
新建一个Java Project新建一个Java类名称为SAXTest.java
新建一个Java类名称为BeanListHandler.java
新建一个xml文件,名称为student.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <root> <student id="1"> <name>张三</name> <age>18</age> <gender>male</gender> </student> <student id="2"> <name>李四</name> <age>19</age> <gender>male</gender> </student> <student id="1"> <name>王五</name> <age>21</age> <gender>female</gender> </student> </root>
由于是Maven工程,所有xml都存放在src/main/resources下面
2.编码
Bean文件:StudentBean.javapublic class StudentBean { private String id; private String name; private String gender; private Integer age; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "StudentBean [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + "]"; } }
XML读写类:SAXTest.java
import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import bean.StudentBean; public class SAXTest { // 创建一个List来保存每个student对象 public static List<StudentBean> studentsList = new ArrayList<StudentBean>(); public static void main(String[] args) { try { //构建SAXParser解析器 SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); //获取读取器 XMLReader reader = parser.getXMLReader(); //设置内容处理器 BeanListHandler handler = new BeanListHandler(); reader.setContentHandler(handler); //读取XML文档 reader.parse("src/main/resources/student.xml"); ArrayList<StudentBean> list = handler.getStudents(); System.out.println("xml文档中共有"+list.size()+"个学生对象。"); StudentBean student; for (int i = 0; i < list.size(); i++) { student = list.get(i); System.out.println("学生姓名:"+student.getName()+",学生年龄:"+student.getAge()+",学生性别:"+student.getGender()); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
Handler类:BeanListHandler.java
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 bean.StudentBean; public class BeanListHandler extends DefaultHandler { List<StudentBean> studentList = new ArrayList<StudentBean>(); private String currentTag; private StudentBean student; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); currentTag = qName; if("student".equals(currentTag)) { student = new StudentBean(); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); if("name".equals(currentTag)) { String name = new String(ch,start,length); student.setName(name); } if("age".equals(currentTag)) { String age = new String(ch,start,length); student.setAge(Integer.parseInt(age)); } if("gender".equals(currentTag)) { String gender = new String(ch,start,length); student.setGender(gender); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); if("student".equals(qName)) { studentList.add(student); student = null; } currentTag = null; } public ArrayList<StudentBean> getStudents() { return (ArrayList<StudentBean>) studentList; } }
3.运行结果
4.结束
1.SAX技术不能修改XML,只是读取xml文件比dom的方式更加节省内存。2.SAX分析器提供的是一种对XML文档的顺序访问机制,对于已经分析过的部分,不能再倒回去重新处理。
3.由于SAX分析器实现简单,对内存要求比较低,因此实现效率比较高同时具有广泛的应用价值。
优点:
1.无需将整个文档加载到内存,因而内存消耗少。
缺点:
1.没有内置的文档导航支持 。
2.不能够随机访问XML文档 。
3.不支持在原地修改XML。
4.不支持名字空间作用域。
5.最适合于只从XML读取数据的应用程(不可用于操作或修改XML文档)。
参考
sax,dom,jdom的优缺点比较
相关文章推荐
- 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播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序