SAX解析
来源:互联网 发布:长春市盘古网络 法人 编辑:程序博客网 时间:2024/04/27 17:10
package cn.itcast;import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class MyDefaultHandler extends DefaultHandler { private String qName; private Student student; private String node; private boolean flag = false; public static List<Student>list = null; @Override public void startDocument() throws SAXException { super.startDocument(); list = new ArrayList<>();//在文档开始出创建一个集合用于存储学生对象 } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); flag = true;//标志着标签的开始 this.qName = qName; if(qName.equals("student")){ student = new Student(); String value = attributes.getValue(0);//获取学生的属性 student.setId(value); } node = qName; } @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); if(!flag){//如果flag为true则表示开始标签,需要对student对象属性设置,如果为false则表示结束标签,不进行student的属性设置 return; } switch(node){ case "name"://name有两个结点,一个是开始标签一个是结束标签。而开始标签和结束标签执行完后都是文本。 String strName = new String(ch,start,length); student.setName(strName);//设置姓名 break; case "age": String str = new String(ch,start,length); int age = Integer.parseInt(str); student.setAge(age);//设置年龄 break; case "sex": student.setSex(new String(ch,start,length));//设置性别 break; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); flag = false;//表示标签的结束 if(qName.equals("student")){//碰到student结束标签则把student添加到集合中 list.add(student); } } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); }}
package cn.itcast;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;public class SAXParserDemo { public static void main(String[] args) throws Exception { //创建一个SAXParser工厂 SAXParserFactory saxPareserFactory = SAXParserFactory.newInstance(); //通过工厂生产一个SAXParser SAXParser newSAXParser = saxPareserFactory.newSAXParser(); newSAXParser.parse("Student.xml", new MyDefaultHandler()); List<Student> list = MyDefaultHandler.list; for(Student stu : list){ System.out.println(stu); } }}
0 0
- SAX解析
- SAX解析
- SAX解析
- SAX解析
- SAX解析
- SAX解析
- SAX解析
- SAX解析
- SAX 解析
- sax解析
- SAX解析
- SAX解析
- SAX解析
- sax解析
- SAX解析
- SAX解析
- SAX解析
- sax解析
- 蓝桥杯常用算法知识点:【递归】杨辉三角
- Mac OS上常用环境变量配置
- JS笔记——首字母设置大写
- qsort函数的用法
- TCP之心跳包实现思路
- SAX解析
- iOS开发企业版ipa分发(in-house)
- Pinterest主页的机器学习
- MySQL cp xtrabackup mysqldump备份过程详解
- 二叉查找树
- 蓝桥杯--算法提高 01背包
- UNP Chapter 21 - 带外数据
- BZOJ 2463:谁能赢呢?【水】
- 蓝桥杯--历届试题 分糖果(模拟水题)