【问题标题】:java xml library based on standard dom基于标准dom的java xml库
【发布时间】:2016-08-28 02:46:04
【问题描述】:

由于从 xml 元素获取文本内容需要 15 行代码(参见官方 oracle 教程),此处 http://java.sun.com/webservices/reference/tutorials/jaxp/html/dom.html,引用的教程本身表明,许多需要使用第三方工具:

"正如你所看到的,当你使用 DOM 时,即使是从节点获取文本这样简单的操作也可能需要一些编程。所以如果你的程序处理简单的数据结构,那么 JDOM、dom4j 甚至1.4 正则表达式包 (java.util.regex) 可能更适合您的需求”

我已经尝试了建议的工具,它们相当容易使用和完成,但它们需要评估其开发的“活力”
。而且这种评价并不明显。
所以我的问题是:

1) 有没有建立在标准 dom 之上的简化 xml 工作的库?它将确保官方库的健壮性和最新性,并具有更高的可用性
2) 在 oracle 计划中,这种“可用性”不足是否会以其他方式(也许是一些新的 jsr?)得到解决?

【问题讨论】:

    标签: java xml dom


    【解决方案1】:

    如果您想要从 XML 元素中获取文本内容,请使用 XPath:

        String xml = "<root><p>This is some text</p><p>And this is more text</p></root>";
        XPath xpath = XPathFactory.newInstance().newXPath();
        String text = xpath.evaluate("/root/p[1]", new InputSource(
                new StringReader(xml)));
        System.out.println(text);
    

    如果要将 Java 对象映射到 XML 并返回,请使用 JAXB。

    XPath (1.0) 和 JAXB 都是 JDK 的一部分,或者可以用更高版本替换它们。

    但是,如果您尝试使用正则表达式解析 XML,您就是 doomed

    【讨论】:

    • +1 用于 XPath 和 javax.xml.xpath API。 JAXB 实现包含在 Java SE 6 中。由于 JAXB 是一种规范 (JSR-222),因此还有其他可用的实现:Metro、EclipseLink MOXy、Apache JaxMe 等。
    • @Blaise:我们已经在其他问题中明确了这一点(stackoverflow.com/questions/7430843/…):当您不需要绑定时,绑定技术迫使您采用复杂的方法。在绑定领域有好的产品(我想想moxy)通过以JAXB标准为核心来强制执行。这不会发生在 DOM 领域,唯一的标准是非生产力导向的 w3c 标准。这几年在绑定产品方面取得了很大的进步,我想知道 JAXP 保护伞下的技术是否也已经成熟,可以“重新思考”了。
    • @AgostinoX - 今天的 Java 中肯定有 DOM 可以发挥作用。在您想要从元素中选择文本的用例中,您可以使用 DOM API 来执行此操作,但 XPath (javax.xml.xpath) API 是更好的选择。这些 API 可以将 DOM 作为输入,但也可以通过 SAX、StAX 和 JAXB 作用于 XML 表示提供程序。
    • @forty-two:从您的回答开始,我开始使用 java XPath API(在我使用 dom4j 集成 xpath 支持之前)。我想读一些关于 XPath API 的官方文章,但令人难以置信的是,标准的 java(ex-sun)教程没有谈论 java XPath api,而是谈论 XPath 本身!我发布了一个问题stackoverflow.com/questions/7512257/java-xpath-api-reference
    【解决方案2】:

    jOOX 可能正是您要查找的库:

    • 它包装了标准的 Java DOM
    • 相当轻巧
    • 它的灵感来自 jquery,这是一种经过验证的简化 DOM 操作的方法

    获取元素文本内容的示例:

    $(document).find("element").text();
    $(document).xpath("//element[3]").text();
    

    【讨论】:

      【解决方案3】:

      XStream 不错,而且易于使用。

      你几乎可以用注释做任何事情。

      http://x-stream.github.io/

      【讨论】:

      • 它看起来像 XmlBeans,但从里到外。或者它也可以通过 xsd 生成类?
      • 不能。事实上,它为这项工作推荐了 XmlBeans。
      • 我得到了建议,我会看看 xstream,但是我重新提出了这个问题“我们能否确保第三方工具的合理长期和及时更新?是否有尝试缓解使用标准方式,因为它可能会被oracle维护并及时更新和修复错误?
      • 没有人可以确保第三方工具的更新,但我在一个大型项目中使用 XStream,它工作正常。上次更新是 2011 年 8 月 11 日。因此正在更新。
      • 查看我对 JAXB 和 XStream (blog.bdoughan.com/2010/10/how-does-jaxb-compare-to-xstream.html) 的比较。注意我领导了一个 JAXB 实现(EclipseLink MOXy),但我觉得比较是公平的。 XStream 确实在 2011 年 8 月发布了 1.4/1.4.1,之前发布的 1.3.1 是在 2008 年 12 月:xstream.codehaus.org/changes.html
      猜你喜欢
      • 2012-09-18
      • 2011-06-26
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      相关资源
      最近更新 更多