首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >您推荐使用哪个Java XML库(来替代dom4j)?

您推荐使用哪个Java XML库(来替代dom4j)?
EN

Stack Overflow用户
提问于 2009-05-06 21:29:55
回答 11查看 64K关注 0票数 76

我正在寻找像dom4j这样的东西,但没有dom4j的缺点,比如糟糕的或缺少文档和似乎停滞不前的开发状态。

背景:我一直在使用and advocating dom4j,但我觉得它并不完全正确,因为我知道这个库远远不是最优的(例如:查看与Stylesheet相关的XSLT类中的方法是如何记录的;您会将什么作为String mode参数传递给run()?)

要求:该库应该使基本的XML处理比using pure JDK (javax.xmlorg.w3c.dom包)更容易。像这样的东西:

XSLT

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

实际上,我真的很喜欢dom4j promises:“易于使用,用于处理XML、XPath和XSLT的开源库……完全支持DOM、SAX和JAXP。”而即将到来的Java2.0确实声称可以解决所有问题:充分利用dom4j 5并添加缺失的文档。但不幸的是,如果你look closer

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

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

EN

回答 11

Stack Overflow用户

发布于 2009-05-07 07:01:40

当然,XOM :-)

XOM的设计初衷是易于学习和使用。它的工作方式非常简单,并且学习曲线非常浅。假设您已经熟悉了XML,那么您应该能够很快地开始使用XOM。

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

XOM是惟一不会影响正确性的

API。XOM只接受名称空间格式良好的XML文档,并且只允许创建名称空间格式良好的XML文档。(实际上,它比这更严格:它实际上保证了所有文档都是可往返的,并且具有定义良好的XML信息集。)XOM管理您的XML,因此您不必这样做。使用XOM,您可以专注于应用程序的独特价值,并相信XOM能够正确地处理XML。

查看网页http://www.xom.nu/,了解常见问题、食谱、设计原理等。如果一切都是如此充满爱的设计:-)

作者还写了关于What's Wrong with XML APIs (and how to fix them)的文章。(基本上,首先是XOM存在的原因)

这也是作者对XOM的5部分采访,他们谈到了what's wrong with XML APIsThe Good, the Bad, and the DOMA Design Review of JDOMLessons Learned from JDOM,最后是Design Principles and XOM

票数 53
EN

Stack Overflow用户

发布于 2009-05-07 12:11:31

The one built into the JDK ...添加了一些内容。

是的,使用它很痛苦:它是按照委员会明确设计的W3C规范建模的。但是,它在任何地方都可用,如果您决定使用它,就不会遇到来自第三方库的“我喜欢Dom4J”、“我喜欢JDOM”、“我喜欢StringBuffer”的论点。特别是因为这样的参数可以使用不同的库转换成不同的代码片段……

但是,正如我前面所说的,我确实做了一些改进: 库是一个实用程序类的集合,它使得使用DOM变得更容易。除了XPath包装器之外,这里没有什么复杂的东西,只是我发现自己为每个作业重写了一堆例程。

票数 18
EN

Stack Overflow用户

发布于 2009-12-07 23:55:23

我一直在用XMLTool取代Dom4j,它工作得很好。

XML工具使用Fluent Interface模式来简化XML操作:

代码语言:javascript
复制
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());

它是为Java 5创建的,很容易在选定的元素上创建可迭代对象:

代码语言:javascript
复制
for (XMLTag xmlTag : tag.getChilds()) {
   System.out.println(xmlTag.getCurrentTagName());
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/831865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档