使用JAXB进行XML解组

我有一个XML文件,我试图解组,但我无法弄清楚如何做到这一点。

XML看起来像

   draft Serial   amt Amount    http somehost.com/asdf   

当我将params作为根元素并且没有服务器元素或配置为根元素时,我以前可以解组。

我添加了一个配置类来尝试取消编组,但我不知道我哪里出错了。

我的课看起来像

 @XmlRootElement public class Config { private Params params = new Params(); @XmlElement(name="params") public Params getParams() { return params; } public void setParam(Params params) { this.params = params; } } public class Params { private List params = new ArrayList(); public List  getParam() { return params; } public void setParam(List params) { this.params = params; } } public class Param { String a; String b; //getters and setters. omitted for brevity } 

解编码

 File file = new File("C:\\config.xml"); InputStream inputStream = new FileInputStream(file); JAXBContext jc = JAXBContext.newInstance(Config.class); Unmarshaller u = jc.createUnmarshaller(); conf = (Config) u.unmarshal(file); System.out.println(conf.getParams().getParam().size()); 

println打印0.我哪里出错了?

我知道我还没有任何服务器节点的代码,还没有到那里。 我的实际XML还没有那个节点,我仍然无法让它在config标签内正确解组params。

您只需要进行以下更改即可。 将Config中的setParams方法更改为

 @XmlElement(name = "params") //<--Annotation added here public void setParam(Params params) { this.params = params; } 

尝试

 @XmlRootElement class Config { private List params = new ArrayList(); @XmlElementWrapper @XmlElement(name="param") public List getParams() { return params; } public void setParams(List params) { this.params = params; } } class Param { String a; String b; ... } 

我认为Param和它的包装都应该是不合适的。 你只需要清除列表。但是Param模型也需要解开。

默认情况下, JAXB(JSR-222)实现会将所有公共字段和属性视为映射。 属性被识别为具有匹配的get / set方法。 您只需要将Config类中的setParam方法更改为setParams以匹配getParams方法。

 @XmlRootElement public class Config { private Params params = new Params(); public Params getParams() { return params; } public void setParams(Params params) { this.params = params; } }