还有一个Java XML库问题
我从不喜欢XML,总是试图避免它。这一天终于到来了 当我试图解析XML时,它真的很难。我使用了DOM解析器,当我调用还有一个Java XML库问题,java,xml,parsing,Java,Xml,Parsing,我从不喜欢XML,总是试图避免它。这一天终于到来了 当我试图解析XML时,它真的很难。我使用了DOM解析器,当我调用节点的getChildNodes()时,它返回NodeList。我必须在使用XPath时使用强制转换 是否有任何Java XML解析库类似于WebDriver的WebElement机制,其中getChildNodes()返回List(或Collection,Iterable等),我不需要进行强制转换。换句话说,是否有一个优雅而简单的XML解析器库 该库可以是只读的,我不需要操作。这
节点的getChildNodes()
时,它返回NodeList
。我必须在使用XPath时使用强制转换
是否有任何Java XML解析库类似于WebDriver的WebElement机制,其中getChildNodes()
返回List
(或Collection,Iterable等),我不需要进行强制转换。换句话说,是否有一个优雅而简单的XML解析器库
该库可以是只读的,我不需要操作。这实际上取决于您使用XML的目的。例如,在我刚刚参加的一个项目中,我们为一个应用程序编写了后端功能。我们通过web服务和SOAP发送/接收消息。当我设置它时,我使用了SpringWS和JAXB注释。因此,它自动将SOAP XML转换为来自后端的Java对象。这意味着,尽管团队的其他成员在概念上知道发生了什么,但他们与实际的SOAP请求无关,除非他们为了调试等目的想查看它们。我们的代码都没有直接处理XML,只处理通过JAXB生成的对象
有意义吗?我也会使用JAXB。但是,如果您有一个与XML关联的模式(或者可以创建一个),那么可以使用jaxb编译器xjc构建Java类来表示XML结构。这样就很容易解析和导航XML了。这是上述方法的替代方法,因为您的代码中没有任何注释。我将作为一个更有用的API进行研究
e、 g.Element.getChildren()
返回Element
对象的列表(不幸的是,它没有被泛化,但API文档是清晰的)
是另一种选择(同样,不是泛型)。如前所述,它实际上取决于您打算做什么
如果您想用Javabean映射XML模式,并自动将XML文件解析为这些bean的实例,那么可以使用
如果您只想解析简单的XML文件,并在运行中处理它们,那么可以使用DOM和SAX的替代方案
它使您能够检索元素的列表
:
Iterator itr = (currentElement.getChildren()).iterator();
while(itr.hasNext()) {
Element oneLevelDeep = (Element)itr.next();
List twoLevelsDeep = oneLevelDeep.getChildren();
// Do something with these children
}
您可能会发现该API比JDK嵌入式DOM API更直观、更易于使用。不幸的是,API没有对返回的集合/列表使用泛型,因此您仍然需要对返回值进行一些强制转换。开始使用泛型,并在版本2.0中使用集合
对于2.0来说,文档不是很好,但是旧文档很好用