You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在使用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,提问作者이동걸

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:05:24