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

如何用MOXy等Java XML框架双向编解码同名元素XML与对象

MOXy实现双向编解码方案

完全可以通过MOXy的注解组合实现XML与Java对象的双向编组和解组,具体配置如下:

1. 调整Field类的注解映射

给Field类的字段添加对应注解,将name映射为XML元素的属性,value映射为元素的文本内容:

import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlValue;

public class Field {
    @XmlAttribute
    String name;
    
    @XmlValue
    String value;

    // JAXB要求的无参构造器
    public Field() {}

    // 可选带参构造器,方便实例化
    public Field(String name, String value) {
        this.name = name;
        this.value = value;
    }

    // JAXB要求的getter/setter方法
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getValue() { return value; }
    public void setValue(String value) { this.value = value; }
}

2. 调整Teacher类的路径映射

给Teacher类的每个Field属性添加@XmlPath注解,指定对应XML元素的匹配规则:

import org.eclipse.persistence.oxm.annotations.XmlPath;

public class Teacher {
    @XmlPath("field[@name='Age']")
    Field age;
    
    @XmlPath("field[@name='Name']")
    Field name;
    
    @XmlPath("field[@name='Course']")
    Field course;

    // JAXB要求的无参构造器
    public Teacher() {}

    // getter/setter方法
    public Field getAge() { return age; }
    public void setAge(Field age) { this.age = age; }
    public Field getName() { return name; }
    public void setName(Field name) { this.name = name; }
    public Field getCourse() { return course; }
    public void setCourse(Field course) { this.course = course; }
}

3. 双向编解码验证

  • 解组(XML→Java对象):MOXy会根据@XmlPath匹配XML中对应name属性的field元素,将属性值和文本内容分别注入Field对象的对应字段,再赋值给Teacher的属性。
  • 编组(Java对象→XML):MOXy会按照@XmlPath生成指定结构的field元素,把Field对象的name作为元素属性、value作为元素文本,完全匹配目标XML格式。

注意事项

  • 确保项目引入MOXy依赖(如Maven中添加eclipselink依赖)。
  • JAXB规范要求实体类必须提供无参构造器,且字段需配套getter/setter方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:00:04