java解析xml文档的几种方式,概论
来源:互联网 发布:apache网络服务器 编辑:程序博客网 时间:2024/06/01 19:59
底层解析方式
1. DOM解析(Document Object Model)
- w3c官方的标准,允许获取和操作文档的任意部分。
- 缺点
- 通常需要加载整个xml文档来构造层次结构,消耗资源较大。
- 优点
- 允许应用程序对数据和结构做出更改
- 访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据
2. SAX解析(Simple API for XML)
- 通过流模式中的推模型分析方式读取,通过事件驱动,每发现一个节点就会引发一个事件,通过回调方法完成解析工作,解析XML文档的逻辑需要应用程序完成。推模式的,所有的操作在解析器自动控制下进行,所有事件都会处理,不管需不需要解析整个文档,解析器都会自动启动解析任务,然后按顺序向下解析,直到解析完成才终止
- 缺点
- 需要应用程序自己负责标签的处理逻辑,使用麻烦
- 单项导航,很难同时访问同一文档中的不同部分数据,不支持XPath
- 优点
- 不需要加载全部文档,即可立即分析
- 只在读取数据时检查数据,不需要保存在内存
- 效率和性能较高,能解析大于系统内存的文档
包装底层的解析方式
JDOM解析(Java-based Document Object Model)
- JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”,极大减少了代码量。而JDOM和DOM4J则是基于底层API的更高级封装。DOM是通用的,而JDOM和DOM4J则是面向java语言的。JDOM是处理XML的纯JavaAPI,使用具体类而不是接口。JDOM是基于树的处理XML的JavaAPI,把树加载到内存中,同时又有SAX的Java规则。JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Java集合类,便于Java开发者使用。JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。
- 缺点
- 没有较好的灵活性
- 性能较差
- 不能处理大于内存的文档
- 优点
- 使用具体的类,而不是接口,简化了DOM的API
- 大量使用了Java集合类,方便Java开发人员
DOM4J(Document Object Model for Java)
- 简单易用采用Java集合框架,并完全支持DOM,SAX和JAXP,开放源代码。你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J。目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件
- 缺点
- 大量使用的API接口,API较为复杂
- 优点
- 大量使用了Java集合类,方便Java开发人员,同时提供一些高性能的替代方法
- 支持XPath
- 有很高的性能
StAX | PULL (Streaming API for XML)
pull 是StAX的一个实现
- 通过流模式中的拉模型分析方式,提供基于指针和迭代器两种支持的方式,StAX 是拉模式的,可以由用户根据需要控制需要处理事件类型及何时终止解析任务,用户调用一次next(),解析器就进行一次向下解析,完全在用户的控制下进行解析操作,在需要的解析工作已经完成时,可以随时终止解析。
- 缺点
- 单向导航,不支持XPath,很难访问同一文档中的不同部分
- 优点
- 接口简单,使用方便
- 可以在某个条件得到满足时停止分析,不必解析整个文档
- 采用流模型分析方式,有较好的性能
比较不同解析方式的性能于差异
创建三个不同大小的XML文档
- smallusers.xml(100KB)
- middleusers.xml(1MB)
- bigusers.xml(10MB)
分别用以上五种解析方式对这三个XML进行解析,然后打印出所有的用户信息,并分别计算它们所用的时间单位:s(秒)
100KB 1MB 10MB DOM 0.146s 0.469s SAX 0.110s 0.328s JDOM 0.172s 0.756s DOM4J 0.161s 0.422s StAX Stream 0.093s 0.334s StAX Event 0.131s 0.359s
- 由上面的测试结果可以看出,性能表现最好的是SAX,其次是StAX Stream和StAX Event,DOM和DOM4J也有着不错的表现。性能最差的是JDOM。
- 所以,如果你的应用程序对性能的要求很高,SAX当然是首选。如果你需要访问和控制任意数据的功能,DOM是个很好的选择,而对Java开发人员来讲,DOM4J是更好的选择。
- 如果只需要做XML文档解析的话,综合性能、易用性、面向对象特征等各方面来衡量,StAX Event无疑是最好的选择。
阅读全文
0 0
- java解析xml文档的几种方式,概论
- XML文档的几种解析方式
- java解析xml的几种方式
- java解析xml的几种方式
- java解析xml的几种方式
- java解析xml的几种方式
- java解析xml的几种方式
- java解析XML的几种方式
- java解析xml的几种方式
- java解析xml的几种方式
- java解析xml的几种方式
- java解析xml的几种方式
- java解析xml的几种方式
- java解析xml的几种方式
- java解析xml的几种方式
- java解析xml的几种方式
- java 解析XML的几种方式
- java解析xml的几种方式
- Java与安卓PDF书籍
- IDEA安装及总结
- CSDN-markdown 首行缩进的快捷实现
- 实战案例——小帅优化网站,70天目标关键词全部第一
- Noip 2003 加分二叉树
- java解析xml文档的几种方式,概论
- C++ 程序崩溃调用堆栈打印
- 高端智能冰箱成白电市场新宠,营造品质生活方式为上策
- 一图囊括所有ES6知识点结构
- local variable 'xxx' referenced before assignment
- 适配器模式
- SSH框架搭建配置
- 总结提高关键词排名最全的41个技巧
- LeetCode-22. Generate Parentheses