如何在使用JAXB生成XML时移除指定的ant123元素?
JAXB生成XML时移除列表元素包裹节点的解决方案
使用JAXB生成XML时,当前生成的XML会以变量名ant123作为列表对象的父元素包裹每个DataTest实例的内容,需要移除该包裹节点,让datatitle和data直接作为entry的子元素。
源码
@XmlAccessorType(XmlAccessType.FIELD) @XmlType(name="POCD_MT000040.Entry", propOrder={"ant123"}) public class POCDMT000040Entry { protected List<DataTest> ant123; public List<DataTest> getAnt123() { return ant123; } public void setAnt123(List<DataTest> ant123) { this.ant123 = ant123; } } @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name="DataTest", propOrder={"datatitle", "data"}) public class DataTest { protected ST datatitle; protected Data data; public ST getDatatitle() { return datatitle; } public void setDatatitle(ST datatitle) { this.datatitle = datatitle; } public Data getData() { return data; } public void setData(Data data) { this.data = data; } }
期望生成的XML
<entry> <datatitle>1</datatitle> <data>1</data> <datatitle>2</datatitle> <data>2</data> <datatitle>3</datatitle> <data>3</data> </entry>
实际生成的XML
<entry> <ant123> <datatitle>1</datatitle> <data>1</data> </ant123> <ant123> <datatitle>2</datatitle> <data>2</data> </ant123> <ant123> <datatitle>3</datatitle> <data>3</data> </ant123> </entry>
解决方案
修改POCDMT000040Entry类中ant123字段的注解,添加@XmlElement(name = ""),让每个DataTest的内容直接序列化到entry节点下,无需包裹节点。修改后的代码如下:
@XmlAccessorType(XmlAccessType.FIELD) @XmlType(name="POCD_MT000040.Entry", propOrder={"ant123"}) public class POCDMT000040Entry { @XmlElement(name = "") protected List<DataTest> ant123; public List<DataTest> getAnt123() { return ant123; } public void setAnt123(List<DataTest> ant123) { this.ant123 = ant123; } } @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name="DataTest", propOrder={"datatitle", "data"}) public class DataTest { protected ST datatitle; protected Data data; public ST getDatatitle() { return datatitle; } public void setDatatitle(ST datatitle) { this.datatitle = datatitle; } public Data getData() { return data; } public void setData(Data data) { this.data = data; } }
说明
@XmlElement(name = "")指定JAXB不生成列表元素的包裹节点,直接将每个DataTest实例的datatitle和data作为entry的子元素输出。DataTest类的注解保持不变,确保datatitle和data按定义的顺序序列化。
内容的提问来源于stack exchange,提问作者이동걸
相关产品推荐
相关产品推荐

