StAX - 是否可以将XML节点转换为HashMap(带有hashmap的OR POJO类)

时间:2013-10-23 12:45:10

标签: java xml streaming

我正在使用Streaming XML API来解析一个巨大的XML文件(大小约10 M,#object~100K)..

是否可以转换像< - p>这样的XML节点

<A>
<C>b </C>
<D>c </D>
<E>d </E>
<F>e </F>
<G>f </G>
</A>

到Java HashMap?或者使用HashMap作为唯一成员的POJO类..这样这个hashmap包含所有的名称 - 值对..

编辑 - 我需要使用Streaming API来解析XML。我想做这样的事情 -

//reach a start element
while(reader.isStartElement());
//until u reach end element
'XMLNode' value = getNodeValue(reader);
//convert XMLNode to POJO

//getNodeValue looks like this
while(reader.isEndElement()) {
    //read file
    //collect all characters until end element 
}
//produce XMLNode 

2 个答案:

答案 0 :(得分:1)

如果您知道根元素名称,就可以使用Jackson这样做。你需要这样的POJO:

@JacksonXmlRootElement(localName = "A")
public static class POJO{

    private Map<String,String> map = new TreeMap<String,String>();

    @JsonAnyGetter
    public Map<String, String> get() {
        return map;
    }

    @JsonAnySetter
    public void set(String name, String value) {
        map.put(name, value);
    }

}

然后这样读:

    ObjectMapper xmlmapper = new XmlMapper();        
    POJO p2 = xmlmapper.readValue(xml,POJO.class);

我刚在我的博客上发布了完整的代码:http://demeranville.com/deserialising-json-or-xml-to-a-map-using-java/(它也适用于JSON)

答案 1 :(得分:0)

也许有些东西发生了变化,但是使用Jackson 2.4.4我可以轻松地将XML文档读取到Map而无需创建POJO /知道根元素名称:

ObjectMapper xmlmapper = new XmlMapper();        
Map setup = xmlmapper.readValue(setupFile, Map.class);