2017-03-07 89 views
0

我正在研究一个学校项目,我必须将某些XML值从API绑定到Java对象。我能够获得所有元素,但我无法获得特定元素的属性。我四处寻找解决方案,但找不到一个解决方案。将XML属性解组为对象值

我有一段XML代码,我想用JAXB将其解组为Java对象。我想获得的属性是Departuretrack中的“变化”。

<Departures> 
    <DepartingTrain> 
     <Id>220</Id> 
     <DepartureTime>2017-03-07T11:03:00+0100</DepartureTime> 
     <DepartureTrack changes="false">5</DepartureTrack> 
    </DepartingTrain> 
    <DepartingTrain> 
     <Id>637</Id> 
     <DepartureTime>2017-03-07T11:18:00+0100</DepartureTime> 
     <DepartureTrack changes="false">12</DepartureTrack> 
    </DepartingTrain> 
</Departures> 

我目前有这个对象,它确实适用于所有的元素。我不知道如何获得属性“更改”并将其放入此对象。

@Entity 
@Getter 
@Setter 
@NoArgsConstructor 
@XmlRootElement(name="Departures") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Departure { 
    @Id 
    @GeneratedValue 
    private long id; 
    @XmlElement(name="Id") 
    private int routeNumber; 
    @XmlElement(name="DepartureTime") 
    private String departureTime; 
    @XmlElement(name="DepartureTrack") 
    private String departureTrack; 
} 

我创建了所有与此对象的离职名单。

@Entity 
@Getter 
@Setter 
@NoArgsConstructor 
@XmlRootElement(name="Departures") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class DepartureList { 

    @Id 
    @GeneratedValue 
    private long id; 
    @XmlElement(name="DepartingTrain") 
    @OneToMany 
    private List<Departure> departures = new ArrayList<>(); 
} 

这就是我的反编码器的样子。

// Returns all departures for a specific station 
public DepartureList getDepartingTrains(String station){ 
    try { 
     URL url = new URL("API URL" + station); 
     URLConnection urlConnection = url.openConnection(); 
     urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc); 
     InputStream is = urlConnection.getInputStream(); 
     InputStreamReader isr = new InputStreamReader(is); 

     Unmarshaller unmarshaller = departureListJaxbContext.createUnmarshaller(); 
     DepartureList departureList = (DepartureList) unmarshaller.unmarshal(isr); 
     return departureList; 
    } catch (JAXBException e) { 
     e.printStackTrace(); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    // Throw Exception 
    return null; 
} 

有谁知道如何从XML表中获取该属性并将其放入Java对象吗?

回答

2

下添加如下DepartureTrack JAXB生成类的“修改”属性:

import javax.xml.bind.annotation.*; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement 
public class DepartureTrack { 

    @XmlAttribute 
    protected String changes; 

@XmlValue; 
protected String content; 

} 
+0

正确的。如果属性只包含布尔值文字(并且这些是必需的),您也可以将String更改为布尔值(或布尔值)。 –

0

应该对Java类,如下面

import org.simpleframework.xml.Attribute; 
import org.simpleframework.xml.Element; 
import org.simpleframework.xml.ElementList; 
import org.simpleframework.xml.Root; 

import java.math.BigDecimal; 
import java.util.List; 

@Root(name = "Departures") 
public class Departures { 

    @ElementList(name = "DepartingTrain", inline = true, required = false) 
    List<DepartingTrain> departingTrain; 



    public List<DepartingTrain> getDepartingTrain() { return this.departingTrain; } 
    public void setDepartingTrain(List<DepartingTrain> _value) { this.departingTrain = _value; } 



    public static class DepartingTrain { 

     @Element(name="Id", required = false) 
     String id; 


     @Element(name="DepartureTime", required = false) 
     String departureTime; 


     @Element(name="DepartureTrack", required = false) 
     DepartureTrack departureTrack; 



     public String getId() { return this.id; } 
     public void setId(String _value) { this.id = _value; } 


     public String getDepartureTime() { return this.departureTime; } 
     public void setDepartureTime(String _value) { this.departureTime = _value; } 


     public DepartureTrack getDepartureTrack() { return this.departureTrack; } 
     public void setDepartureTrack(DepartureTrack _value) { this.departureTrack = _value; } 


    } 

    public static class DepartureTrack { 

     @Attribute(name="changes", required = false) 
     Boolean changes; 



     public Boolean getChanges() { return this.changes; } 
     public void setChanges(Boolean _value) { this.changes = _value; } 


    } 
} 

和存在提供创建Java类的几个网站来自xml或json。

+0

问题是关于JAXB,而不是简单的XML。 –

相关问题