如何在JAXB中使用hashmap属性?

我已经花了一段时间摆弄JAXB,我需要像下面那样生成xml

  . . .   

Root元素的属性是动态的,可以来自属性文件或模板。 如上所示,进入结构的最佳方法是什么? 我正在使用动态变量的哈希映射,然后尝试使用XmlJavaTypeAdapter进行映射,我能做的最好的是

   Value    

在jaxb中有没有办法说使用hashmap的键作为属性名称,并将该键的值作为xml中该属性的值? 或者,如果您认为有更好的方法,我愿意接受建议。 我正在考虑使用jaxb的marshaller分别添加Root节点。 但是如果我可以使用jaxb的适配器会更好。 谢谢!

@XmlAnyAttribute符合您的需求:

 import java.util.List; import java.util.Map; import javax.xml.bind.annotation.XmlAnyAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.namespace.QName; @XmlRootElement(name="Root") public class Root { private Map extension; private List cnodes; @XmlAnyAttribute public Map getExtension() { return extension; } public void setExtension(Map extension) { this.extension = extension; } @XmlElement(name="CNode") public List getCnodes() { return cnodes; } public void setCnodes(List cnodes) { this.cnodes = cnodes; } } 

CNode

 import java.util.Map; import javax.xml.bind.annotation.XmlAnyAttribute; import javax.xml.namespace.QName; public class CNode { private Map extension; @XmlAnyAttribute public Map getExtension() { return extension; } public void setExtension(Map extension) { this.extension = extension; } } 

演示

 import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Root.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); Root root = (Root) unmarshaller.unmarshal(new File("input.xml")); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(root, System.out); } } 

input.xml中