java操作xml学习笔记

xml:英文全称为Extensible Markup Language,翻译过来为可扩展标记语言。

xml是一种数据存储格式,可以保存数据的同时保存数据之间的关系。


Xml运用场景
1、 数据传输:xml本质是字符串,具有跨平台性。
2、 配置文件:xml保存的数据内容可以保存数据之间的层级关系。

sax、dom是两种对xml文档进行分析的方法(没有具体的实现,只有接口)所以不是解释器,如果光有他们,是完成不了对xml文档的处理的。
sax的包是org.xml.sax
dom的包是org.w3c.dom

jaxp是api,他封装了sax\dom两种接口。并在sax\dom的基础之上,作了一套比较简单的api以供开发人员使用。
jaxp的包是javax.xml.parsers
可以看看jaxp的源文件,它的文件中包含了对sax或者dom的引用(import)
jaxp也不是具体的实现,他只是一套api。如果仅仅有jaxp那是无法工作的(其实jaxp只是完成对sax、dom的包装,生成了DocumentBuilderFactory\DocumentBuilder
和SAXParserFactory SAXParser。也就是设计模式中的工厂模式,他的好处就是具体的对象( 解释器)建立由子类完成)

dom解析:
将整个XML使用类似树的结构保存在内存中,再对其进行操作。
是 W3C 组织推荐的处理 XML 的一种方式。
需要等到XML完全加载进内存才可以进行操作
耗费内存,当解析超大的XML时慎用。
可以方便的对xml进行增删该查操作

sax解析:
逐行扫描XML文档,当遇到标签时触发解析处理器,采用事件处理的方式解析xml
(Simple API for XML) 不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。
在读取文档的同时即可对xml进行处理,不必等到文档加载结束,相对快捷
不需要加载进内存,因此不存在占用内存的问题,可以解析超大XML
只能用来读取XML中数据,无法进行增删改


dom解析:

优点:解析一次使用多次,方便增删改查操作。

缺点:因为第一次解析的时候需要将整个xml加载到内存中去,所以这个过程会比较浪费时间,浪费内存,不适合大型的xml。


sax解析:

优点:不用加载到内存,省时间,不占用内存空间省空间。

缺点:每当我们需要xml中的数据的时候都需要重新进行解析。只能进行读取数据的操作,不能进行增删和改的操作。


jdom和dom4j
W3C的DOM标准API难用的让人想撞墙,于是有一帮人开发Java专用的XML API目的是为了便于使用,这就是jdom的由来,开发到一半的时候,另一部分人又分了出来,他们有自己的想法,于是他们就去开发dom4j,形成了今天这样两个API,至于他们之间的性能,jdom全面惨败,dom4j大获全胜。我觉得jdom和dom4j就相当于sax/dom+jaxp,具体的解释器可以选择。

三者比较
1)DOM4J性能最好,连Sun的JAXM也在用DOM4J。目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J.
2)JDOM和DOM在性能测试时表现不佳,在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM。虽然JDOM的开发者已经说明他们期望在正式发行版前专注性能问题,但是从性能观点来看,它确实没有值得推荐之处。另外,DOM仍是一个非常好的选择。DOM实现广泛应用于多种编程语言。它还是许多其它与XML相关的标准的基础,因为它正式获得W3C推荐(与基于非标准的Java模型相对),所以在某些类型的项目中可能也需要它(如在JavaScript中使用DOM)。
3)SAX表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值