XML (Extensible Markup Language可扩展标记语言),XML是一个以文本来描述数据的文档。
XML技术的用途:
(1)充当显示数据(以XML充当显示层)
(2)存储数据(存储层)的功能
(3)以XML描述数据,并在联系服务器与系统的其余部分之间传递。
从某种角度讲,XML是数据封装和消息传递技术。
SAX解析XML
SAX是Simple API for XML的缩写
SAX是读取和操作XML数据更快速、更轻量的方法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及DOM所必需的开销和概念跳跃。SAX API是一个基于事件的API,适用于处理数据流,即随着数据的流动而依次处理数据。SAX API在其解析您的文档时发生一定事件的时候会通知您。在您对其响应时,您不作保存的数据将会被抛弃。
SAX API中主要有四种处理事件的接口,它们分别是ContentHandler, DTDHandler, EntityResolver和ErrorHandler。实际上只要继承DefaultHandler类就可以,DefaultHandler实现 了这四个事件处理器接口,然后提供了每个抽象方法的默认实现。
//创建SAX解析器工厂对象
SAXParserFactory spf = SAXParserFactory.newInstance();
//使用解析器工厂创建解析器实例
SAXParser saxParser = spf.newSAXParser();
//创建SAX解析器要使用的事件侦听器对象
PersonHandler handler=new PersonHandler();
//开始解析文件
saxParser.parse(new File(fileName), handler);
SAX解析特点:
1、基于事件驱动
2、顺序读取,速度快
3、不能任意读取(灵活性差)
4、解析时占用的内存小
5、更适合于在性能要求更高的设备上使用(Android开发中)
代码示例:
主类:
package com.booy;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.Test;
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class XMLParserDemo {
public static void main(String[] args) {
//创建一个解析器工厂对象
SAXParserFactory spf = SAXParserFactory.newInstance();
//创建一个解析器对象
try {
SAXParser saxParser = spf.newSAXParser();
//创建数据处理器
PersonHandler personHandler = new PersonHandler();
//解析文件
InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("com/booy/person.xml");
saxParser.parse(in,personHandler);
List<Person> persons = personHandler.getPerson();
//遍历打印
for(Person p:persons){
System.out.println(p);
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch