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

使用javax.xml库序列化Java对象列表时,如何设置正确的父子节点名

解决JAXB序列化XML节点名称不符的问题

问题原因

你遇到的子节点与父节点名称重复的问题,核心原因是自定义Document类的JAXB注解配置错误——比如Document类上标注了@XmlRootElement(name="Documents"),或者类内注解导致序列化时子节点名称被错误覆盖为Documents。

解决方案

1. 修正Document类的注解

确保Document类的根元素名称设为Document,而非Documents,示例代码如下:

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "Document") // 关键:此处名称必须为Document
public class Document {
    // 类字段示例
    private String content;

    // JAXB强制要求无参构造器
    public Document() {}

    // getter/setter方法
    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

2. 保留原有数组字段的注解

你当前的数组字段注解是正确的,无需修改:

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;

public class YourParentClass {
    @XmlElementWrapper(name = "Documents") // 外层包裹节点
    @XmlElement(name = "Document") // 每个子节点的名称
    private Document[] documents;

    // JAXB强制要求无参构造器
    public YourParentClass() {}

    // getter/setter方法
    public Document[] getDocuments() {
        return documents;
    }

    public void setDocuments(Document[] documents) {
        this.documents = documents;
    }
}

预期序列化结果

完成上述配置后,序列化生成的XML会完全符合你的需求:

<Documents>
   <Document>
      <content>示例内容1</content>
   </Document>
   <Document>
      <content>示例内容2</content>
   </Document>
</Documents>

额外注意事项

  • JAXB要求所有被序列化的类必须提供无参构造器,否则会抛出序列化异常。
  • 如果Document类内的字段需要自定义节点名称,单独用@XmlElement标注即可,不要修改类级别的@XmlRootElement配置。

内容的提问来源于stack exchange,提问作者zaidabuhijleh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:22:39