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

关于带@XmlRootElement注解的Point类生成对应XML的方法咨询

如何让你的Point类生成指定XML结构

当然可以生成你想要的XML啦!不过你当前的Point类还需要做几处小调整,因为JAXB(Java Architecture for XML Binding)有几个必要的要求:

  • 必须要有无参构造器:JAXB在序列化对象时需要默认的无参构造方法来实例化类
  • 成员变量需要提供公共的getter方法:JAXB需要通过getter访问属性值来生成对应的XML元素

修改后的Point类代码

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Point {
    private int x;
    private int y;

    // 必须的无参构造器
    public Point() {}

    // 你原来的带参构造器保留
    public Point(int _x, int _y) {
        x = _x;
        y = _y;
    }

    // 公共getter方法
    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    // 可选:如果需要支持修改属性,可以加上setter,不过序列化只需要getter
    public void setX(int x) {
        this.x = x;
    }

    public void setY(int y) {
        this.y = y;
    }
}

生成目标XML的代码示例

接下来你可以用JAXB的API来生成指定格式的XML,下面是一个简单的测试代码:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class XmlGenerator {
    public static void main(String[] args) {
        try {
            // 创建Point对象
            Point point = new Point(3, 5);

            // 初始化JAXBContext
            JAXBContext context = JAXBContext.newInstance(Point.class);

            // 创建Marshaller实例,用于序列化对象到XML
            Marshaller marshaller = context.createMarshaller();

            // 设置格式化输出,让XML有缩进,和你要的格式一致
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

            // 把对象序列化为XML,这里输出到控制台,也可以输出到文件
            marshaller.marshal(point, System.out);
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

输出效果

运行上面的代码后,控制台会输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<point>
    <x>3</x>
    <y>5</y>
</point>

这和你想要的XML结构完全一致,只是多了XML声明(如果不需要的话,也可以通过Marshaller的属性去掉,不过通常XML声明是推荐保留的)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:17:44