我使用以下代码将XML文件数据转换为HashMap。我修改了旧代码。现在它正常运行。但仅适用于具有以下结构的XML文件:
< root>
< tag>
< subtag>< /subtag>
< subtag>< /subtag>
:
</tag>
< tag>
< subtag>< /subtag>
< subtag>< /subtag>
:
< /tag>
< /root>
如果我更改结构,我会引入新的子子标签,或者我使用空标签。然后它无法正常工作。
public ArrayList getTagList(Document document) {
ArrayList Alltags = new ArrayList();
HashMap tag = new HashMap();
HashMap leaftag = new HashMap();
getTagList( document.getRootElement(),Alltags,tag ,leaftag );
return Alltags;
}
public void getTagList(Element element,ArrayList Alltags, HashMap tag,HashMap leaftag ) {
for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
Node node = element.node(i);
if ( node instanceof Element ) {
getTagList( (Element) node,Alltags, tag,leaftag );
if(((Element) node).isTextOnly()){
leaftag.put(node.getName(), node.getText());
}
else{
tag.put(node.getName(), leaftag);
Alltags.add(tag);
tag= new HashMap();
leaftag= new HashMap();
}
}//End If
}//End For
}
请求帮助&amp;建议我能做些什么额外的改变?因此,所有类型的XML都可以转换为HashMap
如果你建议使用xStream。请告诉我如何直接使用xStream解析XML文件。
答案 0 :(得分:0)
在循环中,您要为internalTags变量分配新的hashmap。所以接下来的添加将落入这个新的hashmap(而不是原始的hashmap)。请使用其他变量名称,例如subInternalTags
或其他! :)
答案 1 :(得分:0)
不确定如何解释......但是你将标签放在一个级别的internalTags中,但只将它们复制到下一级的roottags中,因此你“松散”了最后一级的internalTags ......
无论如何,你的算法很难理解,有哪些不同的地图和列表意味着......
尝试解释您尝试实现的目标......
答案 2 :(得分:0)
我使用google multimap完成了它。感谢您的所有支持。
虽然欢迎您提出建议