gpt4 book ai didi

java - 使用 JAXB 从 Java 对象创建 xml 时如何在 JAXB 中创建嵌套根元素

转载 作者:行者123 更新时间:2023-12-01 08:50:56 25 4
gpt4 key购买 nike

**XML to be generated from java object**  
<automobiles>
<cars>
<type></type>
<car>
<model></model>
<maxspeed></maxspeed>
</car>
<car>
<model></model>
<maxspeed></maxspeed>
</car>
</cars>
<bikes>
<type></type>
<bike>
<model></model>
<maxspeed></maxspeed>
</bike>
<bike>
<model></model>
<maxspeed></maxspeed>
</bike>
</bikes>
</automobiles>

//保存 xml 值的对象类是

@XmlRootElement(name = "automobiles")
class Automobiles {
private List<Cars> cars = null;
private List<Bikes> bikes = null;

@XmlElement
public List<Bikes> getBikes() {
return bikes;
}

public void setBikes(List<Bikes> bikes) {
this.bikes = bikes;
}

@XmlElement
public List<Cars> getCars() {
return cars;
}

public void setCars(List<Cars> cars) {
this.cars = cars;
}
}

@XmlRootElement(name = "cars")
class Cars {
private List<Car> car = null;

@XmlElement
public List<Car> getCar() {
return car;
}

public void setCar(List<Car> car) {
this.car = car;
}
}

@XmlRootElement(name = "bikes")
class Bikes {
private List<Bike> bike = null;

@XmlElement
public List<Bike> getBikes() {
return bike;
}

public void setBikes(List<Bike> bike) {
this.bike = bike;
}
}

@XmlRootElement(name = "Car")
class Car {
private String model = null;
private String maxspeed = null;

@XmlElement
public String getModel() {
return model;
}

public void setModel(String model) {
this.model = model;
}

@XmlElement
public String getMaxspeed() {
return maxspeed;
}

public void setMaxspeed(String maxspeed) {
this.maxspeed = maxspeed;
}
}

@XmlRootElement(name = "Bike")
class Bike {
private String model = null;
private String maxspeed = null;

@XmlElement
public String getModel() {
return model;
}

public void setModel(String model) {
this.model = model;
}

@XmlElement
public String getMaxspeed() {
return maxspeed;
}

public void setMaxspeed(String maxspeed) {
this.maxspeed = maxspeed;
}
}

上面的 xml 是我需要使用 JAXB 编码(marshal)处理生成的格式。我是 JAXB 新手。我使用的对象类和注释是否正确?有人可以帮我解决这个问题吗?

最佳答案

你没有说你的代码有什么问题。但我观察到了这些事情;

您需要 @XmlRootElement只在你的根元素上,即在 class Automobiles ,但其他人则不然。

您使用@XmlElement注释而不指定 name 。然后,XML 元素名称是从方法名称派生出来的。这在大多数情况下都很好,但并非在所有情况下都如此。例如在类 Bikes你有

@XmlElement
public List<Bike> getBikes() { ... }

这隐式映射到 XML 元素 <bikes> ,这是错误的,因为您希望将其映射到 <bike> 。您可以通过两种方式解决此问题:

通过在注释中显式指定名称(首选方式)

 @XmlElement(name = "bike")
public List<Bike> getBikes() { ... }

或者通过更改方法名称(不是首选,因为单数方法名称很奇怪)

 @XmlElement
public List<Bike> getBike() { ... }

关于java - 使用 JAXB 从 Java 对象创建 xml 时如何在 JAXB 中创建嵌套根元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42412726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com