分分钟get使用JAXP实现SAX解析
来源:互联网 发布:一万年来谁著史 知乎 编辑:程序博客网 时间:2024/05/28 03:03
使用JAXP实现SAX解析
sax是一个用于处理xml驱动的“推”模型,是一个得到广泛认可的API。它不像DOM一样建立一个完整的文档树,而是在读取文档时激活一系列事件。这些事件被推给事件处理器,然后由事件处理器提供对文档的访问。
sax解析只用于查找、读取XML数据。不支持增删改!
步骤
1.获取到解析器工厂类对象
2.获取解析类对象
3.创建事件处理器
4.传入解析文件与事件处理器,开始解析
【其中比较麻烦的就是创建事件处理器,不过也有套路】
代码试看:
import java.io.File;import java.util.Iterator;import java.util.List;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;public class SAXDemo02 { public static void main(String[] args) throws Exception {// 1.获取到解析器工厂类对象 SAXParserFactory parserFactory = SAXParserFactory.newInstance();// 2.获取解析类对象 SAXParser parser = parserFactory.newSAXParser();// 3.创建事件处理器 StudentHandler sh = new StudentHandler();// 4.传入解析文件与事件处理器,开始解析 parser.parse(new File("scores.xml") , sh); //从事件处理器获取已读取到的内容 List<Student> list = sh.getStudentList(); Iterator<Student> it = list.iterator(); while (it.hasNext()) { Student student = it.next(); System.out.println(student); } }}
下面看事件处理器的代码
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 StudentHandler extends DefaultHandler{ //用于存储读取数据的集合 private List<Student>studentList; private Student student; //记录读到的标签 private String nowTag; public List<Student> getStudentList() { return studentList; } @Override public void startDocument() throws SAXException { studentList = new ArrayList<>(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equals("student")) { student = new Student(); } nowTag = qName; } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if (qName.equals("student")) { studentList.add(student); } //防止读到结束标签时重新读取 nowTag = ""; } public void characters(char[] ch, int start, int length) throws SAXException { String text = new String(ch, start, length); if (nowTag.equals("id")) { student.setId(Integer.parseInt(text)); }else if (nowTag.equals("name")) { student.setName(text); }else if (nowTag.equals("subject")) { student.setSubject(text); }else if (nowTag.equals("score")) { student.setScore(Integer.parseInt(text)); } }}
阅读全文
0 0
- 分分钟get使用JAXP实现SAX解析
- 使用JAXP解析SAX
- 使用JAXP进行SAX解析
- 使用JAXP进行SAX解析
- 使用jaxp进行sax解析
- JAXP的SAX解析
- JAXP 的 SAX 解析
- XML解析(增删改查)-DOM解析(Jaxp、DOM4J实现DOM解析)、SAX解析(Jaxp实现SAX解析)
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- 使用JAXP进行SAX解析(XMLReaderFactory、XMLReader 、SAXParserFactory与SAXParser)
- 菜鸟Python(5)
- synchronized 与 Lock 区别联系
- Painting Fence[分治]
- linux学习笔记之文件基本属性
- VBA个人总结
- 分分钟get使用JAXP实现SAX解析
- 安卓应用开发中对activity的了解
- toString()和valueOf()
- PHP 递归遍历实现无限分类
- Java的String类以及Java基本数据类型对象包装类
- JavaScript中的事件详解
- linux shell, 三行命令:查找并删除重复的文件
- arcgis server 数据注册 “the data item is inaccessible”
- Spark学习之四-键值对操作