技术:Java-Web基础|XML解析(三)之JAXP-Sax

简介: XML是标记型文档,js 使用 dom 解析标记型文档是根据 html 的层级结构,在内存中分配一个属性结构,把 html 的标签,属性和文本都封装成 document 对象、element 对象,属性对象、文本对象,node 节点对象。「XML」解析技术xml的解析技术:dom 和 sax。

1 XML介绍和解析方式


「XML解析介绍

XML是标记型文档,js 使用 dom 解析标记型文档是根据 html 的层级结构,在内存中分配一个属性结构,把 html 的标签,属性和文本都封装成 document 对象、element 对象,属性对象、文本对象,node 节点对象。


「XML」解析技术

xml的解析技术:dom 和 sax。

DOM:Document Object Model,文档对象模型。这种方式是 W3C 推荐的处理XML 的一种方式。

SAX:Simple APl for XML。这种方式不是官方标准,属于开源社区 XML-DEV,几乎所有的 XML 解析器都支持它。


「XML-dom」

特点:封装在内存处理。

优点:方便实现增删改的操作。

缺点:如果文件过大,可导致内存溢出。


「XML-sax」

特点:事件驱动,从上到下,依次解析,边读取边解析。

优点:不会导致内存溢出

缺点:不能实现增删改的操作


2 JAXP-Sax解析

XML是一种通用的数据交换格式,它的平台无关,语言无关,系统无关,在不同的语言环境的解析方式都是一样的,只不过是实现的语法不同。

SAX解析方式会逐行地去扫描XML文档,当遇到标签时会触发解析处理器,采用事件处理的方式解析XML (Simple API for XML) ,不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。


SAX解析可分四个步骤进行:

1、得到xml文件对应的资源,可以是xml的输入流,文件和uri

2、得到SAX解析工厂(SAXParserFactory)

3、由解析工厂生产一个SAX解析器(SAXParser)

4、传入输入流和handler给解析器,调用parse()解析


Sax解析的流程图如下:

image.png


2.1 创建实验类SaxParserXmlTest,创建xml文件

首先创建一个类SaxParserXmlTest.java,然后创建一个persons.xml,xml可以使用上一章节我们用过的。

publicstaticvoidmain(String[] args) {
StringxmlPath="./tool-jdk8/src/main/java/com/liuyc/tooljdk/xml/persons.xml";
try {
// 1、创建解析器工厂,创建解析器SAXParsersaxParser=SAXParserFactory.newInstance().newSAXParser();
// 2、执行解析转换操作saxParser.parse(newFile(xmlPath), newCustomHandler());
        } catch (ParserConfigurationExceptione) {
thrownewRuntimeException(e);
        } catch (SAXExceptione) {
thrownewRuntimeException(e);
        } catch (IOExceptione) {
thrownewRuntimeException(e);
        }
    }


2.2 编写CustomHandler继承DefaultHandler

该类是SAX解析的核心所在,我们要重写以下几个我们关心的方法。

1、startDocument() 文档解析开始时调用,该方法只会调用一次(可以省略)

2、startElement(String uri, String localName, String qName, Attributes attributes)

3、characters(char[] ch, int start, int length)

4、endElement(String uri, String localName, String qName)

5、endDocument () 文档解析结束后调用,该方法只会调用一次(可以省略)

classCustomHandlerextendsDefaultHandler {
@OverridepublicvoidstartElement(Stringuri, StringlocalName, StringqName, Attributesattributes) {
// 拼接标签的属性if (attributes!=null&&attributes.getLength() >0) {
Stringattrs="";
for (inti=0; i<attributes.getLength(); i++) {
StringattrName=attributes.getQName(i);
Stringvalue=attributes.getValue(i);
attrs+=" "+attrName+"=\""+value+"\"";
            }
System.out.print("<"+qName+attrs+">");
        }
// 标签没有属性,直接输出else {
System.out.print("<"+qName+">");
        }
    }
@OverridepublicvoidendElement(Stringuri, StringlocalName, StringqName) {
System.out.print("</"+qName+">");
    }
@Overridepublicvoidcharacters(char[] ch, intstart, intlength) {
System.out.print(newString(ch, start, length));
    }
}

2.3 解析结果

sax方式解析XML文档结束,打印如下结果。

<persons>
  <person sid="001" uid="QS#123">
    <name>张小帅</name>
    <sex>男</sex>
    <age>28</age>
  </person>
  <person sid="002">
    <name>刘晓萌</name>
    <sex>女</sex>
    <age>21</age>
  </person>
  <person sid="003">
    <name>王老四</name>
    <sex>男</sex>
    <age>38</age>
  </person>
</persons>


2.4 总结

SAX解析XML具有解析速度快,占用内存少,对于Android等移动设备来说有巨大的优势,深入了解SAX的事件触发机制是掌握SAX解析的关键,掌握了SAX的事件触发就掌握了SAX解析XML。

相关文章
|
12天前
|
Java
Java中ReentrantLock释放锁代码解析
Java中ReentrantLock释放锁代码解析
25 8
|
12天前
|
存储 中间件 关系型数据库
数据库切片大对决:ShardingSphere与Mycat技术解析
数据库切片大对决:ShardingSphere与Mycat技术解析
20 0
|
1天前
|
XML Java 数据库连接
Javaweb之Mybatis的XML配置文件的详细解析
Javaweb之Mybatis的XML配置文件的详细解析
9 0
|
1天前
|
存储 安全 网络安全
解析企业邮箱迁移:从技术到策略的完全指南
公司邮箱迁移是业务连续性和数据安全的关键步骤。涉及数据加密、安全存储和密钥管理,确保转移过程中的完整性与机密性。迁移应尽量减少对业务影响,通过IMAP/POP协议实现无缝转移。以Zoho Mail为例,需开启服务,获取授权码,设置转移,选择内容,填写原邮箱信息,最后验证数据。迁移前后注意备份和问题解决,确保顺利进行。
6 0
|
4天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
11 1
|
5天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
6天前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
26 6
|
6天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
6天前
|
监控 前端开发 算法
Java技术体系
Java技术体系(韩顺平老师整理)
8 0
|
10天前
|
存储 人工智能 编译器
存算一体新兴力量:解析我国企业在存储创新、技术路径上的多元化探索
存算一体新兴力量:解析我国企业在存储创新、技术路径上的多元化探索

推荐镜像

更多