1. DOM(Document Object Model)
- 符合官方 W3C 标准
- 是以层次结构组织的节点
- 可以在层次结构中寻找特定信息
- 需要加载整个文档、构造层次结构
优点:可获取和操作 xml 任意部分的结构和数据
缺点:需加载整个 XML 文档,消耗资源大
2. SAX(Simple API for XML)
SAX 解析器基于事件的模型,解析 XML 文档时可以触发一系列事件,解析到期望的节点,可以激活一个回调方法,处理该节点上的数据
优点:
- 不需要全部加载完 XML 文档,可以在达到期望条件时停止解析
- 对内存的要求较低,能解析占用存储较大的文档
- 可以一边加载 XML,一边解析
- 解析 XML 效率和性能较高
缺点:
- 需要开发者负责节点的处理逻辑,文档越复杂程序就越复杂
- 按照 XML 内容单向解析,无法直接定位文档层次,很难同时访问同一个文档中的多处不同数据
3. JDOM(Java-based Document Object Model)
JDOM 自身不包含解析器,使用 SAX2 解析器来解析和验证输入XML文档
包含一些转换器以将 JDOM 表示输出成 SAX2 事件流、DOM 模型、XML 文本文档
优点:API 简单,方便开发
缺点:灵活性较差;性能较差
4. dom4j(Document Object Model for Java)
- dom4j 包含了超出 XML 文档表示的功能
- 支持 XML Schema
- 支持大文档或流化文档的基于事件的处理
- 可以选择按照 DOM 或 SAX 方式解析 XML 文档
优点:
- API丰富易用,较直观,方便开发
- 支持 XPath
- 性能较好
缺点:
- 接口较多,API 较为复杂
总结
- dom4j 性能最佳
- JDOM 和 DOM 性能不佳,大文档易内存溢出,但可移植。小文档可考虑使用 DOM 和 JDOM
- XML 文档较大且不考虑移植性问题可用 dom4j
- 无需解析全部 XML 文档,可用 SAX