JAXP是Java解析XML的标准API,通过工厂模式(DocumentBuilderFactory、SAXParserFactory、TransformerFactory)解耦解析器实现,支持DOM、SAX、StAX及XSLT转换,并可动态切换底层解析器和启用XML Schema验证。
Java中JAXP是Java API for XML Processing的缩写,是一套用于解析、验证和转换XML文档的标准接口集合。它不直接实现解析逻辑,而是通过工厂类屏蔽底层解析器差异,使开发者可在不修改代码的前提下切换SAX、DOM或StAX等不同解析机制。以下是JAXP API的核心使用方式:
一、JAXP核心工厂与解析器体系
JAXP将解析器创建过程抽象为工厂模式,避免硬编码具体实现类。所有解析器实例均由对应工厂生成,确保可插拔性与厂商中立性。
1、DocumentBuilderFactory用于创建DOM解析器,调用newInstance()获取工厂实例,再通过newDocumentBuilder()获得DocumentBuilder对象。
2、SAXParserFactory用于创建SAX解析器,调用newInstance()后通过newSAXParser()获取SAXParser实例,配合自定义DefaultHandler处理事件流。
立即学习“Java免费学习笔记(深入)”;
3、TransformerFactory用于XSLT转换,调用newInstance()后通过newTransformer()或newTransformer(Source stylesheet)构建转换器,支持XML到HTML、文本或其他XML格式输出。
二、DOM解析XML文件
DOM解析将整个XML加载为内存中的树状结构,适合需随机访问、增删改查节点的场景。其操作基于W3C DOM标准接口,所有节点类型均继承自Node接口。
1、调用DocumentBuilderFactory.newInstance()获取工厂实例。
2、设置factory.setNamespaceAware(true)启用命名空间支持(如需)。
3、调用factory.newDocumentBuilder()创建DocumentBuilder对象。
4、使用builder.parse(InputStream)或builder.parse(File)加载XML源,返回Document根对象。
5、通过document.getDocumentElement()获取根元素,再调用getElementsByTagName()、getChildNodes()等方法遍历操作节点。
三、SAX解析XML文件
SAX采用事件驱动模型,逐行读取XML并触发startElement()、endElement()、characters()等回调,内存占用极低,适用于大文件或流式处理场景。
1、定义一个继承org.xml.sax.helpers.DefaultHandler的处理器类,重写关键事件方法。
2、调用SAXParserFactory.newInstance()获取工厂实例。