将XML文件的数据转换为hashmap的问题

时间:2010-10-13 10:20:49

标签: java xml

我使用以下代码将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文件。

3 个答案:

答案 0 :(得分:0)

在循环中,您要为internalTags变量分配新的hashmap。所以接下来的添加将落入这个新的hashmap(而不是原始的hashmap)。请使用其他变量名称,例如subInternalTags或其他! :)

答案 1 :(得分:0)

不确定如何解释......但是你将标签放在一个级别的internalTags中,但只将它们复制到下一级的roottags中,因此你“松散”了最后一级的internalTags ......

无论如何,你的算法很难理解,有哪些不同的地图和列表意味着......

尝试解释您尝试实现的目标......

答案 2 :(得分:0)

我使用google multimap完成了它。感谢您的所有支持。

虽然欢迎您提出建议