2017-02-23 135 views
0
**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> 

从Java对象创建XML时,创建嵌套的根元素//对象类保存值的XML是如何使用JAXB JAXB

@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编组生成。 我是JAXB的新手。我使用的对象类和注释是否正确?有人可以帮我解决这个问题。

+0

我觉得你的课堂设计出现了错误的轨道。你的'汽车'包含一个'List ','Cars'包含一个'List '。 如果'Automobiles'只包含一个'List ',那就更自然了。 –

回答

0

你没有说你的代码有哪些问题。 但我观察到这些东西;

您只需在您的根元素 即class Automobiles上需要@XmlRootElement,但不需要其他元素。您可以使用@XmlElement注释而不指定name。 然后XML元素名称从方法名称派生。 这在大多数情况下都很好,但不是在所有情况下。 例如类Bikes你有

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

这是隐式映射为XML元素<bikes>, 因为你希望它被映射到<bike>这是不对的。 您可以通过两种方式解决这个问题:通过在注释中明确指定的名称(首选方式)

要么

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

或者通过改变方法名(不推荐使用,因为单一的方法名是奇怪然后)

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