首页 文章

你推荐什么Java XML库(替换dom4j)? [关闭]

提问于
浏览
74

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

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

要求:库应该比using pure JDKjavax.xmlorg.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 回答

  • 2

    当然,XOM :-)

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

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

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

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

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

    这里还有5部分的Artima采访,关于XOM的作者,他们在那里谈论what's wrong with XML APIsThe Good, the Bad, and the DOMA Design Review of JDOMLessons Learned from JDOM,最后是Design Principles and XOM .

  • 17

    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包装器之外,这里没有什么复杂的东西,只是我发现自己为每个工作重写的一堆例程 .

  • 3

    我一直在使用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());
    

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

    for (XMLTag xmlTag : tag.getChilds()) {
       System.out.println(xmlTag.getCurrentTagName());
    }
    
  • 0

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

    从使命宣言:

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

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

  • 10

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

    它可以是annotation-driven(如JAXB),但它具有非常简单易用的API,您甚至可以生成JSON .

  • 53

    我将添加@kdgregory的内置答案,说为什么不是JAXB?

    通过一些注释,可以很容易地为大多数XML文档建模 . 我的意思是你可能要解析这些东西然后放入一个物体吧?

    JAXB 2.0内置于JDK 1.6中,与许多其他内置javax库不同,这个非常好(Kohusuke使用它,所以你知道它的好处) .

  • 1

    在最近的一个项目中,我不得不进行一些XML解析,最后使用 Simple Framework ,由同事推荐 .

    最后我很满意 . 它使用基于注释的方法将XML元素和属性映射到Java类和字段 .

    <example>
      <a>
        <b>
          <x>foo</x>
        </b>
        <b>
          <y>bar</y>
        </b>
      </a>
    </example>
    

    对应的Java代码:

    @Root
    public class Example {
    
       @Path("a/b[1]")
       @Element
       private String x;
    
       @Path("a/b[2]")
       @Element
       private String y;
    }
    

    它与dom4j或XOM完全不同 . 你可以避免编写愚蠢的,经验丰富的XML处理代码,但是一开始你可能会在一段时间内试图让注释正确 .

    (4年前我问过这个问题 . 虽然XOM似乎是一个体面且非常受欢迎的dom4j替代品,但我可能会再次使用它 . )

  • 5

    在我们的项目中,我们使用的是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标准 .

  • 0

    你可以试试JAXB,注释非常方便易用:Java Architecture for XML Binding.

  • 0

    我有时使用Jericho,它主要是HTML解析器,但可以解析任何类似XML的结构 .

    当然,它仅适用于最简单的XML操作,例如查找具有给定名称的标记,迭代结构,替换标记及其属性,但这不是最常见的用例吗?

  • 6

    为了构建XML文档,我建议使用xmlenc . 它用于cassandra .

相关问题