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

我正在寻找类似dom4j的东西,但没有dom4j的瑕疵,比如文档不好或缺失以及看似停滞的开发状态。

背景:我一直在使用和倡导dom4j,但并不完全正确,因为我知道库很不理想(例如:请参阅XSLT相关Stylesheet类中的方法是如何记录的;您将传递什么来运行( )作为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有没有好的选择? 请为您喜欢的图书馆提供一些理由,而不是仅仅倾销名称和链接。 :-)


    当然,XOM :-)

    XOM旨在易于学习和易于使用。 它的工作非常简单,学习曲线很浅。 假设您已经熟悉XML,那么您应该能够快速启动并运行XOM。

    我现在使用XOM好几年了,我仍然非常喜欢它。 易于使用,网上有大量文档和文章,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。


    JDK中内置的一个...只有几个补充。

    是的,使用起来很痛苦:它是在W3C规范是由委员会明确设计的。 然而,它可以在任何地方使用,如果你对此置之不理,就不会遇到来自第三方库的“我喜欢Dom4J”,“我喜欢JDOM”,“我喜欢StringBuffer”等参数。 特别是因为这些参数可以变成使用不同库的不同代码片段......

    但是,正如我所说的,我确实略微提高了一点: Practical XML库是一组实用程序类,可以更轻松地使用DOM 。 除了XPath包装器之外,这里没有任何复杂的东西,只是我发现自己正在为每项工作重写一堆例程。


    我一直使用XMLTool替换Dom4j,并且它工作得很好。

    XML工具使用Fluent接口模式来促进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());
    

    它适用于Java 5,并且可以很容易地在选定元素上创建一个可迭代对象:

    for (XMLTag xmlTag : tag.getChilds()) {
       System.out.println(xmlTag.getCurrentTagName());
    }
    
    链接地址: http://www.djcxy.com/p/47489.html

    上一篇: What Java XML library do you recommend (to replace dom4j)?

    下一篇: printing output from javax.xml.transform.Transformer with only standard java api (Indentation and Doctype positioning)