【问题标题】:Yet another Java XML library question另一个 Java XML 库问题
【发布时间】:2011-01-17 00:04:25
【问题描述】:

我从不喜欢 XML,总是尽量避免使用它。这一天终于到来了。

当我尝试解析 XML 时,真的很难。我使用了 DOM 解析器,当我调用 NodegetChildNodes() 时,它返回了 NodeList。我在使用 XPath 时必须使用强制转换。

有没有类似WebDriver的WebElement机制的Java XML解析库,其中getChildNodes()返回List<Node>(或者Collection、Iterable等),我不需要做强制转换。也就是说,有没有一个优雅而简单的 XML 解析器库。

该库是只读的,我不需要操作。

【问题讨论】:

    标签: java xml parsing


    【解决方案1】:

    这实际上取决于您使用 XML 的目的。例如,在我刚刚参与的一个项目中,我们为应用程序编写了后端功能。我们通过 Web 服务和 SOAP 发送/接收消息。当我设置它时,我使用了 Spring-WS 和 JAXB 注释。因此,它自动将 SOAP XML 转换为传入/传出后端的 Java 对象。这意味着尽管团队的其他成员在概念上知道发生了什么,但他们与实际的 SOAP 请求隔离开来,除非他们想查看它们以进行调试等。我们的代码没有直接处理 XML,只处理通过 JAXB 生成的对象。

    有意义吗?

    【讨论】:

      【解决方案2】:

      我也会使用 JAXB。但是,如果您有一个与您的 XML 相关联的模式(或者可以创建一个),那么您可以使用 jaxb 编译器 xjc 来构建 Java 类来表示您的 XML 结构。然后很容易解析和导航 XML。这是上述方法的替代方法,因为您的代码中没有任何注释。

      【讨论】:

        【解决方案3】:

        我会调查 JDOM 作为一个更有用的 API。

        例如Element.getChildren() 返回 Element 对象的列表(不幸的是,它没有被通用化,但 API 文档很清楚)。

        dom4j 是另一种选择(同样,未泛化)。

        【讨论】:

          【解决方案4】:

          如前所述,这实际上取决于您打算做什么。

          如果您想用 Java bean 映射您的 XML 模式,并自动将您的 XML 文件解析为这些 bean 的实例,您可以使用JAXBXMLBeans

          如果您只想解析简单的 XML 文件并动态处理它们,您可以使用JDOM,它是 DOM 和 SAX 的替代品。

          它使您能够检索元素的List

          Iterator itr = (currentElement.getChildren()).iterator();
             while(itr.hasNext()) {
               Element oneLevelDeep = (Element)itr.next();
               List twoLevelsDeep = oneLevelDeep.getChildren();
               // Do something with these children
             }
          

          【讨论】:

            【解决方案5】:

            您可能会发现JDOM API 比 JDK 嵌入式 DOM API 更直观、更易于使用。不幸的是,API 没有对返回的集合/列表使用泛型,因此您仍然需要对返回值进行一些转换。

            【讨论】:

              【解决方案6】:

              dom4j 开始使用泛型,Collection 使用 2.0 版。

              文档对于 2.0 来说不是很好,但旧文档可以很好地服务。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2019-11-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多