JAXB结合类似的元素

时间:2012-12-25 21:30:15

标签: java jaxb

我有一个XML源,它以我无法改变的格式生成XML 格式类似于:


    <entry name="bob" color="red"/>
    <entry name="bob" color="blue"/>
    <entry name="bob" color="green"/>

其中 name 属性可用于分组 解组后的结果类似于


    class Entry {

        String name = "bob";
        String color = "red";

    }

    class Entry {

        String name = "bob";
        String color = "green";

    }

但是我想把它们组合成类似的东西:


    class Entry {

        String name = "bob";
        Set colors = { "red", "blue", "green" };

    }

任何提示?

1 个答案:

答案 0 :(得分:1)

作为JAXB解组过程的一部分,我认为这很容易。此外,您应该已经将public Set<String> colors定义为对象的字段。作为单独的第二个处理步骤应该很容易实现:

entries = unmarshaller.unmarshal(...);
Map<String, Entry> compacted_entries = new HashMap<String, Entry>();
for (Entry entry: entries) {
   if compacted_entries.containsKey(entry.name)
     compacted_entries.get(entry.name).colors.add(entry.color);
   else
     compacted_entries.put(entry.name, entry);
     entry.colors = new HashSet<String>();
     entry.colors.add(entry.color);
   end
}