`
wj_126mail
  • 浏览: 127794 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 解析 XML 再总结

阅读更多
关于用java 解析 XML,有四种方式,那用哪一种好呢? 咱们说说看吧。


1.解析XML的方式有两种, 一种是SAX ,一种是DOM,SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。

2.基于DOM的解析,解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。

3.基于SAX的解析,是事件驱动,解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;

4.基于DOM4J解析,DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。

5.基于JDOM解析,为减少DOM、SAX的编码量,出现了JDOM;优点:20-80原则,极大减少了代码量。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。
分享到:
评论
4 楼 wj_126mail 2010-09-16  
SAX2继承了SAX1的所有功能,仍然采用事件流/调用流的构架,但是SAX2同SAX1最大的几个区别在于:
用XmlReader取代了Parser。
支持名空间(Namespace),这个特性是很多XML的高级功能所必须的,同时这个特性也导致了在SAX接口很多部分的变化。
使用feature(特性)和properties(属性)的方法来配置解析器的行为和获取参数。通过XmlReader.setFeature(String name, boolean value )可以设置XmlReader的行为,通过XmlReader.getFeature( String name)可以获取当前的行为特性;通过XmlReader.setProperty( String name, Object value)可以设置XmlReader的参数,通过XmlReader.getProperty(String name)可以获取XmlReader的参数。
提出了Filter(过滤器)的概念,在SAX里,一个从应用程序到SAX的请求流和一个从SAX到应用程序的事件流组成了整个地交互过程。但是在某些情况下,我们需要对流中运行的信息进行修改,例如剔除某些不需要的信息,修改某些信息从而简化处理过程等等,这时在流中的信息到达Handler之前进行过滤就成了理所当然的选择。于是SAX2提出了接口XmlFilter。
在了解进一步的知识之前,首先我们需要了解的是,SAX不是一个XML的解析器,而是提供了一个通用的接口,这个接口使各种XML的解析器可以相互转换。这些支持SAX解析器具有相同的方法,并且可以通过Java的系统设置进行配置。
3 楼 wj_126mail 2010-09-16  
SAX接口解析XML文件的基本原理为:首先获得一个实现了SAX接口的解析器,这个解析器通常是由第三方软件公司提供的;然后自己写一个符合SAX标准的处理器类,并且把这个类注册到刚刚做好的解析器;解析XML文件;解析器会把XML文件作为一个文件流读出来,然后再把文件流转换成一个事件流,这个事件流中的内容包括“文档开始”、“文档结束”、“元素开始”、“元素结束”等等标志文件状态的事件;根据事件调用注册到解析器里的处理器里面的相应的方法;在解析器进行XML文件的解析的同时,应用程序可以调用解析器提供的方法,对解析器的行为进行控制或获取解析器的状态。
2 楼 wj_126mail 2010-09-16  
另外,JDOM 和 DOM 在性能测试时表现不佳,在测试 10M 文档时内存溢出。在小文档情况下还值得考虑使用 DOM 和 JDOM。
1 楼 wj_126mail 2010-09-16  
上面说解析XML的方式有两种, 原因是因为JDOM 自身不包含解析器。它通常使用 SAX2 解析器来解析和验证输入 XML 文档(尽管它还可以将以前构造的 DOM 表示作为输入)。它包含一些转换器以将 JDOM 表示输出成 SAX2 事件流、DOM 模型或 XML 文本文档。JDOM 是在 Apache 许可证变体下发布的开放源码。

相关推荐

Global site tag (gtag.js) - Google Analytics