你推荐什么Java XML库(替换dom4j)?

Jon*_*nik 76 java xml dom4j

我正在寻找像dom4j这样的东西,但没有dom4j的瑕疵,例如文档不好或丢失,看似停滞的开发状态.

背景:我一直在使用 提倡 dom4j,但是我觉得它并不完全正确,因为我知道这个库远非最佳(例如:看看XSLT相关样式表类中的方法是如何记录的;你会传递什么来运行( )作为String mode参数?)

要求:与使用 纯JDK(javax.xmlorg.w3c.dom包)时相比,库应该使基本的XML处理更容易.这样的事情:

  • 将XML文档(从文件或字符串)读入对象,轻松遍历和操作DOM,执行XPath查询并针对它运行XSLT.
  • 在Java代码中构建XML文档,添加元素,属性和数据,最后将文档写入文件或字符串.

我真的很喜欢dom4j所承诺的,实际上:" 易于使用的开源库,用于处理XML,XPath和XSLT [...],完全支持DOM,SAX和JAXP. "即将推出的dom4j 2.0确实声称能解决所有问题:充分利用Java 5并添加缺少的文档.但不幸的是,如果你仔细观察:

警告:dom4j 2.0处于pre-alpha阶段.它很可能无法编译.如果它可以随机编译,很可能无法运行.如果它偶尔运行,它可能会突然爆炸.如果要使用dom4j,则需要1.6.1版.真.

......并且网站已经说了长时间了.那么有没有一个很好的替代dom4j?请为您的首选库提供一些理由,而不是仅仅转储名称和链接.:-)

Pet*_*aný 53

当然,XOM :-)

XOM旨在易于学习和易于使用.它非常直接,并且学习曲线非常浅.假设您已经熟悉XML,那么您应该能够非常快速地启动并运行XOM.

我现在使用XOM几年了,我仍然非常喜欢它.易于使用,Web上有大量文档和文章,API在版本之间不会发生变化.1.2最近发布.

XOM是唯一不会对正确性做出妥协的XML API.XOM只接受格式良好的XML文档,只允许您创建格式良好的XML文档.(实际上,它比这更严格一些:它实际上保证所有文档都是可循环访问的,并且具有定义良好的XML信息集.)XOM管理您的XML,因此您不必这样做.使用XOM,您可以专注于应用程序的独特价值,并信任XOM以获得正确的XML.

查看网页http://www.xom.nu/获取常见问题解答,食谱,设计原理等.如果只有一切设计都有这么多的爱:-)

作者还写了关于XML API的错误(以及如何修复它们)的文章.(基本上,首先存在XOM的原因)

这里也是5部分Artima采访约XOM,这里只讲作者有什么不对的XML API,好的,坏的,和DOM,JDOM的设计审查,教训JDOM教训,最终设计原则和XOM.

  • 谨防.将dom4j/jdom转换为XOM是一种痛苦.此外,API不支持Java集合.两者都非常疼痛. (11认同)
  • 只是在使用XOM之后添加我的意见.肯定它比JDOM好.但它缺少某些糖功能,我希望在XML API中看到它们(`Element.setAttribute(name,value)`,`Element.setText(string)`,访问者模式(请参阅http://lists.ibiblio.org /pipermail/xom-interest/2010-March/004076.html),更好的StAX/TrAX API支持),dom4j有. (4认同)

kdg*_*ory 17

JDK中内置的一个 ...添加了一些.

是的,使用起来很痛苦:它是根据委员会明确设计的W3C规范建模的.但是,它可以在任何地方使用,如果你坚持下去,你就不会遇到"我喜欢Dom4J","我喜欢JDOM","我喜欢StringBuffer"这些来自第三方库的论点.特别是因为这些参数可以使用不同的库变成不同的代码片段......

但是,正如我所说,我的确略有增强:实用XML库是一组实用程序类,可以更轻松地使用DOM.除了XPath包装器之外,这里没有什么复杂的东西,只是我发现自己为每个工作重写的一堆例程.

  • 我同意.我曾经发誓JDom,但发现一旦我写了一些帮助方法,JAX-P的东西就不再那么困难了,而且它已经安装到处了. (2认同)

Gil*_*pio 10

我一直在使用XMLTool替换Dom4j,它运行得很好.

XML Tool使用Fluent Interface模式来促进XML操作:

XMLTag tag = XMLDoc.newDocument(false)
   .addDefaultNamespace("http://www.w3.org/2002/06/xhtml2/")
   .addNamespace("wicket", "http://wicket.sourceforge.net/wicket-1.0")
   .addRoot("html")
   .addTag("wicket:border")
   .gotoRoot().addTag("head")
   .addNamespace("other", "http://other-ns.com")
   .gotoRoot().addTag("other:foo");
System.out.println(tag.toString());
Run Code Online (Sandbox Code Playgroud)

它是为Java 5制作的,并且很容易在所选元素上创建一个可迭代对象:

for (XMLTag xmlTag : tag.getChilds()) {
   System.out.println(xmlTag.getCurrentTagName());
}
Run Code Online (Sandbox Code Playgroud)


Ste*_* B. 6

我一直很喜欢jdom.它被编写为比DOM解析更直观(并且无论如何SAX解析总是显得笨拙).

从使命宣言:

没有令人信服的理由让Java API操纵XML变得复杂,棘手,不直观或者颈部疼痛.JDOMTM既以Java为中心,又以Java优化.它的行为类似于Java,它使用Java集合,它是当前Java开发人员的完全自然的API,并且它提供了使用XML的低成本入口点.

这几乎是我的经验 - 相当直观的节点树导航.

  • 看起来像[JDOM 2.0.0刚刚发布](http://www.jdom.org/news/index.html):"2.0.0将JDOM带入了Java 5引入的泛型和其他Java语言项目的世界". (3认同)
  • 我最近在一个项目上使用过JDOM,虽然API很直观,但我遇到了两个问题:开发似乎已经停滞不前(最后一次更新是在2007年底),而且库还没有被广泛化. (2认同)

IAd*_*ter 5

我使用XStream,它是一个简单的库,可以将对象序列化为XML,然后再返回.

它可以是注释驱动的(如JAXB),但它具有非常简单易用的API,您甚至可以生成JSON.