【发布时间】:2017-07-27 14:37:45
【问题描述】:
我正在做一个学校项目,我必须将一些 XML 值从 API 绑定到 java 对象。我能够获取所有元素,但是我无法获取特定元素的属性。我四处寻找解决方案,但找不到。
我有这段 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 对象中?
【问题讨论】:
标签: java spring jaxb unmarshalling