在哪里可以找到Java XML框架的详细比较?

时间:2010-10-04 12:45:31

标签: java xml architecture jaxb xml-parsing

我正在尝试为我的Java项目选择XML处理框架,我迷失了名字...... XOM,JDOM等。在哪里可以找到所有流行的Java XML框架的详细比较?

2 个答案:

答案 0 :(得分:60)

正如布莱斯指出的那样坚持标准。但是,在此期间创建了多个标准来解决不同的问题/用例。选择哪一个完全取决于您的要求。我希望以下比较可以帮助您选择正确的。

现在你必须选择两件事 API 和API的实施(有很多)

API

SAX:优点

  • 基于事件
  • 记忆效率高
  • 比DOM快
  • 支持架构验证

SAX:缺点

  • 没有对象模型,你必须进入 事件和创造你自己
  • 单个解析xml并且只能 前进
  • 只读api
  • 没有xpath支持
  • 有点难以使用

DOM:优点

  • 内存中对象模型
  • 保留元素顺序
  • 双向
  • 读写api
  • xml MANIPULATION
  • 简单易用
  • 支持架构验证

DOM:缺点

  • 用于较大XML文档的内存耗费 (通常用于XML文档 小于10 mb)
  • 通用模型,即您使用节点

Stax:专业人士

  • 最好的SAX和DOM,即DOM的易用性 和SAX的效率
  • 记忆效率高
  • 拉模型
  • 读写api
  • supports subparsing
  • 可以同时读取多个文档 在一个单一的线程
  • XML的并行处理更容易

Stax:Cons

  • 没有架构验证支持(目前为止) 我记得,不确定他们是否有 现在补充说明)
  • 只能像sax一样前进
  • no xml MANIPULATION

JAXB:专业人士

  • 允许您访问和处理XML 数据而不必知道XML
  • 双向
  • 比DOM更有效的内存
  • SAX和DOM是通用解析器 因为JAXB创建了一个特定于的解析器 你的XML Schmea
  • 数据转换:JAXB可以转换xml 到java类型
  • 通过对象支持XML MANIPULATION API

JAXB:缺点

  • 只能解析有效的XML

Trax:使用XSLT将XML从1种形式转换为另一种形式

实现

SAX,DOM,Stax,JAXB只是规格。有很多open source and commercial implementations of these specifications。大多数情况下,您可以坚持使用JDK或您的应用程序服务器。但有时您需要使用默认提供的不同实现。这是您可以欣赏JAXP wrapper api的地方。 JAXP 允许您通过配置切换实现,而无需修改代码。它还提供了解析器/规范独立的api,用于解析,转换,验证和查询XML文档。

各种实施的效果和其他比较


现在标准很好但是偶尔遇到这个疯狂的用例,你必须支持解析 100千兆字节大小的XML文档,或者你需要超快处理XML(可能是您正在实现XML解析器芯片),这就是您需要转储标准并寻找不同的处理方式。它是关于使用正确的工具正确的工作!这是我建议您查看vtd-xml

的地方

在SAX和DOM的最初几天,人们想要比其中任何一个提供的API更简单。 JDOMdom4jXmlBeansJiBXCastor是我认识的流行广告。

答案 1 :(得分:2)

@ Pangea

JAXB vs DOM and SAX

  

JAXB与DOM和SAX无法直接比较。 Java DOM和SAX   解析API是用于解析XML文档的低级API,而JAXB   (用于XML绑定的Java API)是用于转换XML的更高级API   Java对象层次结构的元素和属性(反之亦然)。   JAXB的实现很可能使用DOM或SAX解析器   在幕后进行XML输入数据的实际解析。