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

如何使用JAXB对带包名的XML元素进行编组/解组?

JAXB编组/解组带包名根元素的XML处理方案

一、现有代码的问题

  1. Setter方法参数缺失:setNumber()和setEngine()未定义入参,无法完成属性赋值,必须补充参数才能正常工作。
  2. 根元素名称不匹配:XML根元素是com.jaraws.api.Vehicle,但默认JAXB会将类名首字母小写的vehicle作为根元素名称,导致无法与XML对应,需要显式指定根元素名称。

二、修正后的Vehicle类

package com.jaraws.api;

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

@XmlRootElement(name = "com.jaraws.api.Vehicle")
public class Vehicle {
    private String number;
    private String engine;

    @XmlElement
    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    @XmlElement
    public String getEngine() {
        return engine;
    }

    public void setEngine(String engine) {
        this.engine = engine;
    }
}

三、编组(Marshalling)示例

将Vehicle对象转换为指定格式的XML:

import com.jaraws.api.Vehicle;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;

public class MarshallerExample {
    public static void main(String[] args) throws JAXBException {
        // 创建Vehicle对象
        Vehicle vehicle = new Vehicle();
        vehicle.setNumber("KT12356");
        vehicle.setEngine("DIESEL");

        // 初始化JAXB上下文
        JAXBContext context = JAXBContext.newInstance(Vehicle.class);
        Marshaller marshaller = context.createMarshaller();
        // 格式化输出XML
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        // 将对象编组为字符串
        StringWriter writer = new StringWriter();
        marshaller.marshal(vehicle, writer);
        System.out.println(writer.toString());
    }
}

四、解组(Unmarshalling)示例

将指定格式的XML转换为Vehicle对象:

import com.jaraws.api.Vehicle;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;

public class UnmarshallerExample {
    public static void main(String[] args) throws JAXBException {
        String xmlContent = "<com.jaraws.api.Vehicle>\n" +
                            "  <number>KT12356</number>\n" +
                            "  <engine>DIESEL</engine>\n" +
                            "</com.jaraws.api.Vehicle>";

        // 初始化JAXB上下文
        JAXBContext context = JAXBContext.newInstance(Vehicle.class);
        Unmarshaller unmarshaller = context.createUnmarshaller();

        // 将XML解组为Vehicle对象
        Vehicle vehicle = (Vehicle) unmarshaller.unmarshal(new StringReader(xmlContent));
        System.out.println("车牌号:" + vehicle.getNumber());
        System.out.println("发动机类型:" + vehicle.getEngine());
    }
}

五、可行性说明

修正上述代码错误后,完全可以实现对给定格式XML的编组和解组操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:10:36