JAXP的SAX解析方式(理解过程)

2024-05-23 18:48

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

1.JAXP的DOM解析方式和SAX解析方式的区别:

1.DOM:在使用 DOM 解析 XML 文档时,需要读取整个 XML 文档,在内存中构架代表整个 DOM 树的Doucment对象,从而再对XML文档进行操作。此种情况如果 XML 文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。

2.SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会文档进行操作。

2.JAXP的SAX解析(了解 解析的过程)

2.1* 只能做查询,不能做增删改。

2.2* SAX解析:解析器自动帮我们

1.* 解析器

1.* 获取解析器的工厂

2.* 获取解析器对象

3.* 解析XML(XML的文件的地址,事件处理器:DefaultHandler)         

2.* 事件处理器

* 自己编写的类,需要继承DefalutHandler类,重写三个方法。

* startElement()
* characters()
* endElement()

3. 图示:


4.代码示例:

<pre name="code" class="java">package cn.itcast.jaxp.sax;import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;public class JaxpSaxTest {public static void main(String[] args) {try {run1();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 获取所有的解析内容* */public static void run1() throws Exception{//获取SAX的解析工厂SAXParserFactory factory = SAXParserFactory.newInstance();//获取解析器SAXParser parser = factory.newSAXParser();//解析parser.parse("src/book2.xml", new MyHandler2());}
}/*** 获取作者标签文本*/
class MyHandler2 extends DefaultHandler{private boolean flag = false;//解析到作者标签时置为trueprivate int count = 0;@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {if("作者".equals(qName)){flag = true;count++;}}/*** 控制characters的输出,只在解析坐着吧标签的时候才打印*/@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {//flag为true时才打印if(flag && count==1){String str = new String(ch, start, length);//将拿到的文本拼接成一个字符串System.out.println(str);}}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {//flag恢复到falseflag = false;}}/*** 自己事件处理器* 重名三方法* */
class MyHandler extends DefaultHandler{/*** 只要一解析到开始标签的时候,默认调用该方法,把解析的内容赋值给参数*/@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {System.out.println("开始标签: " + qName);}/*** 只要解析到文本内容,就调用该方法*/@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {String str = new String(ch, start, length);//将拿到的文本拼接成一个字符串System.out.println(str);}/*** 解析到结束标签,默认调用该方法*/@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {System.out.println("结束标签: " + qName);}
}

 

2.3* SAX的解析原理:        

解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,(边读边解析)

都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,

会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。


事件处理器由程序员编写,程序员通过事件处理器中方法的参数,

就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理。
















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



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

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝