用java解析高级XML
嗨,我想解析非常奇怪的xml,如下所示:用java解析高级XML,java,xml,Java,Xml,嗨,我想解析非常奇怪的xml,如下所示: <foo> <foo1> <foo2></foo2> <foo2></foo2> <foo2></foo2> <foo2></foo2> <foo2></foo2> <foo2></foo2&
<foo>
<foo1>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
</foo1>
</foo>
<foo>
<foo1>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
</foo1>
</foo>
使用本教程时,我无法从foo2获取值:
但是如果我们有相同的参数,比如foo2,它就不起作用了,我建议使用它。这是一个免费的图书馆,应该可以毫不费力地完成这项工作
首先,将XML字符串解析为文档。此文档表示您的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();
}
在这之后,你可以迭代它的每个孩子。那将是外部的一个。如果您不知道有多少childdepth,您可以随时检查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
}
}
等等。您可以从元素中获取每个属性或getName等
这是因为您必须有一个父项才能容纳所有其他元素,如下例所示:
<parentFoo>
<foo>
<foo1>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
</foo1>
</foo>
<foo>
<foo1>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
<foo2></foo2>
</foo1>
</foo>
</parentFoo>
我同意JAXB是一条出路。为xml使用在线XSD生成器。使用该XSD并使用Netbeans提供的JAX-B绑定来创建Java类
然后,您可以使用标准JAX-B API对XML进行marshall和unmarshall处理。//规范化您的XML,然后使用该XML创建文档,然后按照以下代码进行操作
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
}
}
}
}
您应该在google上搜索Jaxb,或者单击tutorial,记住,不要试图去发现这个问题。这个问题似乎离题了,因为它缺乏足够的信息来诊断问题。请更详细地描述您的问题,或者在问题本身中加入a。您可能应该告诉我们您将要解析的内容。要一份清单吗?一根绳子?到字符串[]?到您自己的数据结构?这不是有效的XML。在任何标准的网络浏览器中打开都会被告知原因。为什么是a-1?这是一个完全合理的答案?