Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
还有一个Java XML库问题_Java_Xml_Parsing - Fatal编程技术网

还有一个Java XML库问题

还有一个Java XML库问题,java,xml,parsing,Java,Xml,Parsing,我从不喜欢XML,总是试图避免它。这一天终于到来了 当我试图解析XML时,它真的很难。我使用了DOM解析器,当我调用节点的getChildNodes()时,它返回NodeList。我必须在使用XPath时使用强制转换 是否有任何Java XML解析库类似于WebDriver的WebElement机制,其中getChildNodes()返回List(或Collection,Iterable等),我不需要进行强制转换。换句话说,是否有一个优雅而简单的XML解析器库 该库可以是只读的,我不需要操作。这

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

当我试图解析XML时,它真的很难。我使用了DOM解析器,当我调用
节点的
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来说,文档不是很好,但是旧文档很好用