我有一个xml,它由元素xx和xxt组成。每个xxt包含一个或多个xx元素。每个xx都有一个“cap”和“act”属性。我需要做的是将所有的cap-act值存储在地图中。
现在请注意我的xml可以包含0或无限数量的xxt。因此,这应该递归地完成。现在,我只是在没有xxt元素时进行了简单的解析:
for (Element element: (List<Element>) minfo.elements()) {
if (element.getName().equals("xx")) {
String cap = element.attributeValue("cap").trim();
String act = element.attributeValue("act").trim();
map.put(cap,act);
}
else if(element.getName().equals(xxt)){
//TODO recursive method
}
}
xml的一个例子可能是这样的:
<xx cap="Min" act="act1"/>
<xx cap="Ver" act="asd" />
<xx cap="Tan" act="fw" />
<xxt id="PR" cap="A">
<xx cap="tY" act="ate" />
<xx cap="Tn" act="bga" />
<xx cap="Tn" act="sga" />
<xxt cap="an" act="y34" />
<xx cap="Miu" act="sahg"/>
</xxt>
</xxt>
<xx cap="Mzt" act="act1"/>
答案 0 :(得分:1)
您只需要创建一个方法,该方法接受节点的参数以进行分析并通过其子节点。
找到'xx'后,它会被添加到地图中。 找到'xxt'后,您可以通过将'xxt'节点作为参数传递来调用该函数。
public function void analyze(Element element) {
for (Element child : (List<Element>) element.elements()) {
if (child.getName().equals("xx")) {
String cap = child.attributeValue("cap").trim();
String act = child.attributeValue("act").trim();
map.put(cap,act);
} else if(child.getName().equals("xxt")){
analyze(child);
}
}
}
// To start recursivity
analyze(minfo);
这段代码不会编译,但它是给你一个例子。