2017-02-23 97 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() { ... }