簡體   English   中英

將XML屬性解編為對象值

[英]Unmarshal XML attribute to object value

我正在一個學校項目上,我必須將一些XML值從API綁定到Java對象。 我能夠獲取所有元素,但是卻無法獲取特定元素的屬性。 我到處尋找解決方案,但是找不到。

我有這段XML代碼,我想用JAXB解組到Java對象。 我想獲得的屬性是Departuretrack中的“ changes”。

<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>

我目前確實有這個對象,它確實適用於所有元素。 我不知道如何獲取屬性“ changes”並將其放入該對象。

@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對象?

在DepartureTrack JAXB Generated類下添加“ changes”屬性,如下所示:

import javax.xml.bind.annotation.*;

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

    @XmlAttribute
    protected String changes;

 @XmlValue;
protected String content;

}

您應該具有如下的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; }


    }
}

而且很少有網站可以從xml或json創建Java類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM