技术: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。

相关文章
|
9天前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
88 1
|
6月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
1577 1
|
6月前
|
传感器 人工智能 物联网
穿戴科技新风尚:智能服装设计与技术全解析
穿戴科技新风尚:智能服装设计与技术全解析
539 85
|
3月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。该方案设计目标是实现通用性,适用于各种网络架构和业务场景。
93 1
|
4月前
|
缓存 前端开发 应用服务中间件
Web端实时通信技术SSE在携程机票业务中的实践应用
本文介绍了携程机票前端基于Server-Sent Events(SSE)实现服务端推送的企业级全链路通用技术解决方案。文章深入探讨了 SSE 技术在应用过程中包括方案对比、技术选型、链路层优化以及实际效果等多维度的技术细节,为类似使用场景提供普适性参考和借鉴。
126 7
|
6月前
|
人工智能 API 语音技术
HarmonyOS Next~鸿蒙AI功能开发:Core Speech Kit与Core Vision Kit的技术解析与实践
本文深入解析鸿蒙操作系统(HarmonyOS)中的Core Speech Kit与Core Vision Kit,探讨其在AI功能开发中的核心能力与实践方法。Core Speech Kit聚焦语音交互,提供语音识别、合成等功能,支持多场景应用;Core Vision Kit专注视觉处理,涵盖人脸检测、OCR等技术。文章还分析了两者的协同应用及生态发展趋势,展望未来AI技术与鸿蒙系统结合带来的智能交互新阶段。
370 31
|
6月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
173 15
|
6月前
|
编解码 监控 网络协议
RTSP协议规范与SmartMediaKit播放器技术解析
RTSP协议是实时流媒体传输的重要规范,大牛直播SDK的rtsp播放器基于此构建,具备跨平台支持、超低延迟(100-300ms)、多实例播放、高效资源利用、音视频同步等优势。它广泛应用于安防监控、远程教学等领域,提供实时录像、快照等功能,优化网络传输与解码效率,并通过事件回调机制保障稳定性。作为高性能解决方案,它推动了实时流媒体技术的发展。
340 5
|
6月前
|
数据采集 机器学习/深度学习 存储
可穿戴设备如何重塑医疗健康:技术解析与应用实战
可穿戴设备如何重塑医疗健康:技术解析与应用实战
229 4
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术如何重塑客服系统?解析合力亿捷AI智能客服系统实践案例
本文探讨了人工智能技术在客服系统中的应用,涵盖技术架构、关键技术和优化策略。通过感知层、认知层、决策层和执行层的协同工作,结合自然语言处理、知识库构建和多模态交互技术,合力亿捷客服系统实现了智能化服务。文章还提出了用户体验优化、服务质量提升和系统性能改进的方法,并展望了未来发展方向,强调其在客户服务领域的核心价值与潜力。
321 6

推荐镜像

更多
  • DNS