我正在使用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
答案 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);