我正在寻找像dom4j这样的东西,但没有dom4j的瑕疵,例如文档不好或丢失,看似停滞的开发状态 .
背景:我一直在使用and advocating dom4j,但感觉不完全正确,因为我知道这个库远非最佳(例如:看看XSLT中与Stylesheet类相关的方法是如何记录的;你会传递什么来运行( )作为 String mode
参数?)
要求:库应该比using pure JDK(javax.xml和org.w3c.dom包)更容易进行基本的XML处理 . 这样的事情:
-
将XML文档(从文件或字符串)读入对象,轻松遍历和操作DOM,执行XPath查询并针对它运行XSLT .
-
在Java代码中构建XML文档,添加元素,属性和数据,最后将文档写入文件或字符串 .
我真的很喜欢dom4j promises,实际上:“易于使用的开源库,用于处理XML,XPath和XSLT [...],完全支持DOM,SAX和JAXP . ”即将推出的dom4j 2.0确实声称可以解决所有问题:充分利用Java 5并添加缺少的文档 . 但不幸的是,如果你look closer:
警告:dom4j 2.0处于pre-alpha阶段 . 它很可能无法编译 . 如果它可以随机编译,很可能无法运行 . 如果它偶尔运行,它可能会突然爆炸 . 如果要使用dom4j,则需要1.6.1版 . 真 .
......并且网站已经说了很长时间了 . 那么有没有一个很好的替代dom4j?请为您的首选库提供一些理由,而不是仅仅转储名称和链接 . :-)
11 回答
当然,XOM :-)
我现在使用XOM几年了,我仍然非常喜欢它 . 易于使用,Web上有大量文档和文章,API在版本之间不会发生变化 . 1.2最近发布 .
查看网页http://www.xom.nu/以获取常见问题解答,食谱,设计原理等 . 如果只有一切设计都有这么多的爱:-)
作者还写了关于What's Wrong with XML APIs (and how to fix them) . (基本上,首先存在XOM的原因)
这里还有5部分的Artima采访,关于XOM的作者,他们在那里谈论what's wrong with XML APIs,The Good, the Bad, and the DOM,A Design Review of JDOM,Lessons Learned from JDOM,最后是Design Principles and XOM .
The one built into the JDK ...添加了一些内容 .
是的,使用起来很痛苦:它是根据委员会明确设计的W3C规范建模的 . 但是,它可以在任何地方使用,如果你坚持下去,你就不会遇到“我喜欢Dom4J”,“我喜欢JDOM”,“我喜欢StringBuffer”这些来自第三方库的论点 . 特别是因为这些参数可以使用不同的库变成不同的代码片段......
但是,正如我所说,我确实略有提升: Practical XML library is a collection of utility classes that make it easier to work with the DOM . 除了XPath包装器之外,这里没有什么复杂的东西,只是我发现自己为每个工作重写的一堆例程 .
我一直在使用XMLTool替换Dom4j,它运行得很好 .
XML Tool使用Fluent Interface模式来促进XML操作:
它是为Java 5制作的,并且很容易在所选元素上创建一个可迭代对象:
我一直很喜欢jdom . 它被编写为比DOM解析更直观(并且无论如何SAX解析总是显得笨拙) .
从使命宣言:
这几乎是我的经验 - 相当直观节点树的导航 .
我使用XStream,它是一个简单的库,可以将对象序列化为XML,然后再返回 .
它可以是annotation-driven(如JAXB),但它具有非常简单易用的API,您甚至可以生成JSON .
我将添加@kdgregory的内置答案,说为什么不是JAXB?
通过一些注释,可以很容易地为大多数XML文档建模 . 我的意思是你可能要解析这些东西然后放入一个物体吧?
JAXB 2.0内置于JDK 1.6中,与许多其他内置javax库不同,这个非常好(Kohusuke使用它,所以你知道它的好处) .
在最近的一个项目中,我不得不进行一些XML解析,最后使用 Simple Framework ,由同事推荐 .
最后我很满意 . 它使用基于注释的方法将XML元素和属性映射到Java类和字段 .
对应的Java代码:
它与dom4j或XOM完全不同 . 你可以避免编写愚蠢的,经验丰富的XML处理代码,但是一开始你可能会在一段时间内试图让注释正确 .
(4年前我问过这个问题 . 虽然XOM似乎是一个体面且非常受欢迎的dom4j替代品,但我可能会再次使用它 . )
在我们的项目中,我们使用的是http://www.castor.org/,但仅用于小型XML文件 . 它完成了's really easy to learn, needs just a mapping XML file (or none if the XML tags match perfectly class attributes) and it' . 它支持侦听器(如回调)以执行其他处理 . 缺点:它不是像JAXB那样的Java EE标准 .
你可以试试JAXB,注释非常方便易用:Java Architecture for XML Binding.
我有时使用Jericho,它主要是HTML解析器,但可以解析任何类似XML的结构 .
当然,它仅适用于最简单的XML操作,例如查找具有给定名称的标记,迭代结构,替换标记及其属性,但这不是最常见的用例吗?
为了构建XML文档,我建议使用xmlenc . 它用于cassandra .