2017-03-07 2 views
0

Ich arbeite an einem Schulprojekt, bei dem ich einige XML-Werte von einer API an ein Java-Objekt binden muss. Ich bin in der Lage, alle Elemente zu bekommen, aber ich kann nicht das Attribut eines bestimmten Elements bekommen. Ich habe nach einer Lösung gesucht, konnte aber keine finden.Unmarshales XML-Attribut zum Objektwert

Ich habe dieses Stück XML-Code, den ich mit JAXB zu einem Java-Objekt entpacken möchte. Das Attribut, das ich erhalten möchte, ist "Änderungen" in 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> 

Ich habe derzeit dieses Objekt, es funktioniert für alle Elemente. Ich weiß nicht, wie ich das Attribut "Änderungen" erhalten und in dieses Objekt einfügen kann.

Ich erstelle eine Liste mit allen Abfahrten mit diesem Objekt.

@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<>(); 
} 

So sieht mein Unmarshaller aus.

Kann jemand dieses Attribut vom XML-Blatt erhalten und in das Java-Objekt einfügen?

Antwort

2

Fügen Sie die „Änderungen“ -Attribut unter DepartureTrack JAXB generiert Klasse wie folgt:

import javax.xml.bind.annotation.*; 

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

    @XmlAttribute 
    protected String changes; 

@XmlValue; 
protected String content; 

} 
+0

Richtig. Sie können String auch in Boolean (oder boolesch) ändern, wenn das Attribut nur boolesche Wertliterale enthält (und diese sind erforderlich). –

0

Sie sollten wie Java-Klassen haben unter

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


    } 
} 

und es gibt nur wenige Seiten, die Java-Klassen erstellen bieten aus dem XML oder JSON.

+0

Die Frage lautete JAXB, nicht Simple XML. –

Verwandte Themen