【Java】解析XML配置文件总结——简介(一)

简介

常用开发中我们经常需要解析xml配置文件,所以在这里总结一下xml解析的几种方式。

什么是JAXP

JAXP(Java API for XMLProcessing,意为XML处理的Java API)是Java XML程序设计的应用程序接口之一,它提供解析和验证XML文档的能力。JAXP是在Java社区进程下开发的,包括JSR 5 (JAXP 1.0)和 JSR 63 (JAXP 1.1和1.2)两个规范。
JAXP解析XML的三种基本接口为:

  1. 文档对象模型解析接口或DOM接口
  2. XML简单API解析接口或SAX接口
  3. XML流API或StAX接口(是JDK 6的一部分,为JDK 5提供单独的包)
  4. 除了解析接口,JAXP还提供了XSLT接口用来对XML文档进行数据和结构的转换。
XML的解析方式对比
方式实例模型原理优缺点复杂度
Tree-based APIDOM JDOM DOM4j文档对象模型将整个xml 加载内存中,形成文档对象树,所有对xml操作都对内存中文档对象进行DOM解析适合于对文件进行修改和随机存取的操作,但是不适合于大型文件的操作,Xml文件很大时会占用很大内存,速度慢易于理解,易于开发
Event-based APIPUSH:SAX事件驱动型的XML解析方式逐行扫描文档,一边扫描一边解析一边释放内存资源 ---- 不允许在内存中保留大规模xml 数据(Application被parser控制了-Observer模式)不用一次装载整个文件,遇到标签会触发一个事件,适合对XML的顺序访问,占用内存资源稍小,SAX只能读xml文件。速度比dom快,但仍不理想,Xml文件很大时,又不需要进行随机查找的时候,适合采用此方式开发上比较复杂,需要用户自定义事件处理器,对开发人员更加灵活
Event-based APIPULL:StAX事件驱动型的XML解析方式逐行扫描文档,一边扫描一边解析一边释放内存资源 ---- 不允许在内存中保留大规模xml 数据(Application控制了parser-Iterator模式)StAX不但能读xml还能写xml。速度很快开发上比较复杂,需要用户自定义事件处理器,对开发人员更加灵活

所以DOM解析适合于修改,SAX解析适合于读取大型文件,2者结合的话可以用JDOM

简要介绍XML的解析方式(DOM JDOM DOM4j SAX STAX)

一般来说,解析XML文件存在着两种方式,一种是Event-based API,比如说是SAX。另外一种就是Tree-based API 比如说DOM JDOM DOM4j。在读取配置文件的时候我们一般喜欢用Tree-based API这种方式,把xml文件读入并变成DOM的形式的一棵文档树,然后进行查找。但是这种方式在面对XML文件很大的时候就不好用了,因为你需要消耗很大的内存。
所以,如果你面对很大的XML文件并且又不需要随机查找的时候比较适合采用Event-based API,也就是在解析xml文件的时候如果是START_ELEMENT,呢么他就调用startElement()的回调方法。他遍历过了就是遍历过了,不会再回去了。

在Event-based API中存在两种方式:一种是PUSH的方式,比如SAX;另一种是PULL的方式,比如Stax。这两种方式的区别:

Event-based API方式模式操作步骤
SAXXML 简单 API推push模式(由服务器为主导,向客户端主动发送数据( 推送 ))1.创建一个xmlParser。2.把application处理的xml注册到xmlParser。3.xmlParser遍历xmlFile,然后来调用application。(注意:这里用的是Observer的模式,就是接收到event的时候,去调用event的callback函数,xmlParser控制application)
StAXXML 流 API拉pull模式(由客户端为主导,主动向服务器申请数据( 轮询 ))1.创建一个xmlParser。2.xmlParser打开一个xmlFile。3.application调用这个xmlParser来获取xmlFile所得到的一系列event。(注意:这里用的Iterator模式,application控制xmlParser)
如何选择

1.优先选择DOM方式(编程容易)
2.如果xml文件过大或者很多,优先使用StAX(比SAX快,强大,新)

参考博客:
JavaEE实战——XML文档DOM、SAX、STAX解析方式详解
xml解析方式与效率对比

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以使用多种方式来解析XML格式文件,常用的有DOM和SAX两种解析方式。 DOM(Document Object Model)是将整个XML文档以树形结构加载到内存中的解析方式。它将XML文档解析为一个包含节点对象的树,通过遍历树的节点来获取和操作XML文档的内容。DOM解析方式相对简单,适用于小型XML文件或需要随机访问多个节点的情况。但是,由于将整个XML文档加载到内存中,所以对于大型XML文件来说,会占用大量内存,并可能导致内存溢出。 SAX(Simple API for XML)是基于事件驱动的解析方式。在SAX解析中,当解析器遇到XML文件中的节点时,它会触发事件,然后将事件交给事先注册的事件处理程序进行处理。SAX解析方式不需要将整个XML文档加载到内存中,适用于处理大型XML文件。然而,由于SAX是基于事件的,所以只能按顺序读取XML文档而不能随机访问节点。 除了DOM和SAX,还有一些其他的Java解析库可用于解析XML文件,如JDOM、StAX和XPath等。JDOM是基于Java Collections框架的解析库,提供了简单易用的API;StAX是一种流式解析方式,类似于SAX,但API更加易用;XPath是一种用于在XML文档中定位节点的查询语言。 通过使用这些Java解析方式,我们可以方便地读取和操作XML格式的文件,提取其中的数据并进行处理,使得我们能够轻松地与其他系统进行数据交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值