又一个Java XML库问题

时间:2010-02-15 13:52:00

标签: java xml parsing

我从不喜欢XML,并且总是试图避免它。而这一天终于来了。

当我尝试解析XML时,真的很难。我使用DOM解析器,当我调用getChildNodes()的{​​{1}}时,它返回Node。我在使用XPath时不得不使用强制转换。

是否存在类似于WebDriver的WebElement机制的Java XML解析库,其中NodeList返回getChildNodes()(或Collection,Iterable等),我不需要进行转换。在其他单词,是否有一个优雅而简单的XML解析器库。

图书馆可以只读,我不需要操纵。

6 个答案:

答案 0 :(得分:3)

我会调查JDOM作为更实用的API。

e.g。 Element.getChildren()会返回Element个对象的列表(不幸的是,已被通用化,但API文档已明确)。

dom4j是另一种选择(同样,不是通用的)。

答案 1 :(得分:2)

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

有意义吗?

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

如果要将XML架构映射到Java bean,并自动将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
   }

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

文档对于2.0来说不是很好,但旧文档很好用。