XML解析之SAX
来源:互联网 发布:bigworld引擎全套源码 编辑:程序博客网 时间:2024/05/22 17:24
今天我们来用SAX解析XML。
首先我们来写一个简单的XML文件,student.xml:
<?xml version="1.0" encoding="UTF-8"?><student id="3" xx="xx"> <name>张三</name> <sex>男</sex> <age>20</age></student>
public class SAX01 extends DefaultHandler { @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.println("开始扫描元素:" + qName); if (attributes != null) { for (int i = 0; i < attributes.getLength(); i++) { System.out.print(attributes.getQName(i) + "=" + attributes.getValue(i) + "\n"); } } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("结束扫描元素:" + qName); } @Override public void characters(char[] ch, int start, int length) throws SAXException { System.out.println("扫描文本节点" + new String(ch, start, length)); } @Override public void startDocument() throws SAXException { System.out.println("扫描文档开始"); } @Override public void endDocument() throws SAXException { System.out.println("扫描文档结束"); } public static void main(String[] args) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse("src/student.xml", new SAX01()); }}
得到输出结果:
扫描文档开始
开始扫描元素:student
id=3
xx=xx
扫描文本节点
开始扫描元素:name
扫描文本节点张三
结束扫描元素:name
扫描文本节点
开始扫描元素:sex
扫描文本节点男
结束扫描元素:sex
扫描文本节点
开始扫描元素:age
扫描文本节点20
结束扫描元素:age
扫描文本节点
结束扫描元素:student
扫描文档结束
然后我们来解析一个复杂一点的xml,students.xml:
<?xml version="1.0" encoding="UTF-8"?><students> <student id="001"> <name>张三</name> <sex>男</sex> <age>20</age> </student> <student id="002"> <name>李四</name> <sex>女</sex> <age>21</age> </student></students>
然后我们来创建一个学生类:
public class Student { private String id; private String name; private String sex; private int age; @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]"; } //get、set方法省略}
我们使用SAX来解析它。
public class SAX02 extends DefaultHandler { private List<Student> students = null; private Student student = null; private String preTag = null;// 标记上一个节点名称 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if ("student".equals(qName)) { student = new Student(); if (attributes != null) { student.setId(attributes.getValue(0)); } } preTag = qName; } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if ("student".equals(qName)) { students.add(student); student = null; } preTag = null; } @Override public void characters(char[] ch, int start, int length) throws SAXException { if (preTag != null) { String content = new String(ch, start, length); if ("name".equals(preTag)) { student.setName(content); } else if ("sex".equals(preTag)) { student.setSex(content); } else if ("age".equals(preTag)) { student.setAge(Integer.parseInt(content)); } } } @Override public void startDocument() throws SAXException { System.out.println("开始读取学生信息"); students = new ArrayList<>(); } @Override public void endDocument() throws SAXException { System.out.println("学生信息读取完毕"); } private void printList() { for (Student s : students) { System.out.println(s); } } public static void main(String[] args) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); SAX02 sax02 = new SAX02(); parser.parse("src/students.xml", sax02); sax02.printList(); }}
最后得到的结果为:
开始读取学生信息
学生信息读取完毕
Student [id=001, name=张三, sex=男, age=20]
Student [id=002, name=李四, sex=女, age=21]
0 0
- 解析xml之--SAX
- 解析xml之--SAX
- 解析xml之--SAX
- XML解析之SAX
- XML 解析之SAX
- XML解析之SAX
- 【xml之SAX解析】
- XML解析之SAX
- 解析XML之SAX
- xml之SAX解析
- xml之sax解析
- xml解析之sax
- XML解析之SAX
- xml解析之SAX
- XML之sax解析
- XML解析之SAX
- xml之SAX解析
- Xml之Sax解析
- 遇到一个Bug:Android: requestLayout() improperly called
- [状态压缩]poj1185 炮兵阵地
- Huffman 编码压缩算法
- Socket网络编程学习笔记(4):TCP消息边界处理
- redis集群配置
- XML解析之SAX
- Java 数组操作常见的十一种方法
- 二叉苹果树(树形D)
- [WinForm]ListView行高的设置
- MongoDB 安装成为Windows服务
- mysql数据库导出表的数据字典
- 打开mxd和两控件复制
- 在TOMCAT中部署war
- 【C/C++】用回调函数实现计算器