解析java中的高级XML

嗨,我想解析看起来像这样的奇怪的xml:

                      

当我使用本教程时,我无法从foo2获取值:

http://javarevisited.blogspot.com/2011/12/parse-xml-file-in-java-example-tutorial.html

但是如果我们有像foo2这样的参数,它就不起作用

//规范化XML,然后通过该XML创建一个Document ,然后按照下面的代码

 NodeList nList = doc.getElementsByTagName("foo"); for (int temp = 0; temp < nList.getLength(); temp++) { // loop for foo Node nodeTable = nList.item(temp); Element xmlFoo = (Element) nodeTable; if (nodeTable.getNodeType() == Node.ELEMENT_NODE) { NodeList nodeListFoo1 = xmlFoo.getElementsByTagName("foo1"); for (int i = 0; i < nodeListFoo1.getLength(); i++) { // loop for foo1 Node nodefoo2 = nodeListFoo1.item(i); Element elementfoo1 = (Element) nodefoo2; // Collect foo2 NodeList nodeListfoo2Name = elementfoo1.getElementsByTagName("foo2"); for (int j = 0; j < nodeListfoo2Name.getLength(); j++) { //// loop for foo2 Node nodefoo2Name = nodeListfoo2Name.item(j); Element elementfoo2Name = (Element) nodefoo2Name; //TODO: write code here, what you want to collect from foo2 } } } } 

那是因为您必须有一个父项来容纳所有其他元素,如下例所示:

                     

我建议使用jdom2 。 这是一个免费的图书馆,应该毫无困难地完成工作。

首先,您将XML字符串解析为Document 。 这个文件代表你的compleat xml。

  SAXBuilder reader = new SAXBuilder(); Document doc = null; try { doc = reader.build(new File("Path to XML")); //also string is possible } catch (JDOMException | IOException e) { e.printStackTrace(); } 

在此之后,您可以迭代它的每个Childs。 那将是外部的。 如果你不知道有多少孩子深入,你可以随时检查childCount != 0还有一个。 也许为此创建一个递归方法。

 for (Element e : doc.getRootElement().getChildren()) { // do something with the childs here for example e.getText(); //would be "" in your case for(Element child : e.getChildren()){ //do something with the child child } } 

等等。 您可以从Elements获取每个attributegetName()等。

这是DOM解析器的另一个教程。

我同意JAXB是要走的路。 为您使用在线XSD生成器xml。 获取XSD并使用Netbeans提供的JAX-B绑定来创建Java类。

然后,您可以使用标准JAX-B API进行编组和解组。