0

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

是否可以转换 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 
4

2 回答 2

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)

于 2013-10-23T14:46:32.897 回答
0

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

ObjectMapper xmlmapper = new XmlMapper();        
Map setup = xmlmapper.readValue(setupFile, Map.class);
于 2015-07-03T20:01:31.937 回答