JAXP解析XML之SAX解析

2023-12-23 20:38
文章标签 xml 解析 sax jaxp

本文主要是介绍JAXP解析XML之SAX解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JAXP解析XML之SAX解析

Jaxp解析XML之DOM解析:https://blog.csdn.net/sinat_32366329/article/details/80201544

什么是SAX解析

SAXsimple API forXML)是一种XML解析的替代方法。相比于DOMSAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。

DOM SAX对比

SAX

DOM

依序读入文件并产生相对应事件,可以处理任何大小的XML文件

在内存中建立文件树,不适于处理大型的XML文件。

只能对文件按顺序剖析一遍,不支持对文件的随意存取

可以随意存取文件树的任何部分,没有次数限制

通常只去能读取XML文件内容,修改起来很麻烦

可以随意修改文件树,从而修改了XML文件

开发上比较复杂,需要自己来制作事件处理器

易于理解,易于开发

对工作人员更灵活,可以用SAX建立自己的XML对象模型

已经在DOM基础之上建立了文件树

Demo案例

Jaxp.xml

<?xml version="1.0" encoding="UTF-8"?>
<department><user no="001"><name>郭靖</name><six>男</six><age>25</age></user><user no="002"><name>黄蓉</name><six>女</six><age>20</age></user>
</department>

Java代码

package com.rabbit.sax;import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;/*** jaxp的sax解析* Created by HASEE on 2018/5/5.*/
public class JaxpSaxDemo {@Testpublic void test() throws ParserConfigurationException, SAXException, IOException {//创建SAXParserFactory工厂实例SAXParserFactory sax = SAXParserFactory.newInstance();//通过工厂方法获取SAXParser实例SAXParser parser = sax.newSAXParser();//创建XML解析器XMLReader reader = parser.getXMLReader();//设置自己的处理器对象reader.setContentHandler(new MyContentHandler());//解析XMLreader.parse(this.getClass().getResource("/jaxp.xml").getPath());}class MyContentHandler extends DefaultHandler {@Overridepublic void startDocument() throws SAXException {System.out.println("开始读取Document");}@Overridepublic void endDocument() throws SAXException {System.out.println("结束读取Decument");}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {System.out.println("</" + qName + ">");}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {String str = new String(ch, start, length);if (str.trim().length() > 0) {System.out.println("characters:" + str);}}@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {System.out.println("<"+qName+">");}}}

这篇关于JAXP解析XML之SAX解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/529366

相关文章

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java JDK Validation 注解解析与使用方法验证

《JavaJDKValidation注解解析与使用方法验证》JakartaValidation提供了一种声明式、标准化的方式来验证Java对象,与框架无关,可以方便地集成到各种Java应用中,... 目录核心概念1. 主要注解基本约束注解其他常用注解2. 核心接口使用方法1. 基本使用添加依赖 (Maven