2016-06-01 14 views
0

ich jeden Wert Schalten Element in der XML-Eingabe sollte lauten:Fehlender Wert für XmlElement

<Section type="report" startTime="0" endTime="182.952"> 
     <Turn speaker="spk1" startTime="7.186" endTime="8.114"> 
      <Sync time="7.186"/>un souci avec une inscription 
     </Turn> 
     <Turn speaker="spk2" startTime="8.114" endTime="8.533"> 
      <Sync time="8.114"/>ouais 
     </Turn> 
     <Turn speaker="spk1 spk2" startTime="8.533" endTime="9.731"> 
      <Sync time="8.533"/> 
      <Who nb="1"/>first value! 
      <Who nb="2"/>second value! 
     </Turn> 
</Section> 

So habe ich JAXB und machte folgende Klassen:

Rubrik:

@XmlRootElement(name="Section") 
public class Section { 

private List<Turn> turn; 

@XmlElement(name="Turn") 
public List<Turn> getTurn() { 
    if(turn == null){ 
     turn = new ArrayList<Turn>(); 
    } 
    return turn; 
} 

public void setTurn(List<Turn> turn) { 
    this.turn = turn; 
} 
} 

Wende:

@XmlRootElement(name="Turn") 
public class Turn { 

private String speaker; 
private float startTime; 
private float endTime; 
private Sync sync; 
private String content; 
private List<Who> whoList; 

@XmlAttribute 
public String getSpeaker() { 
    return speaker; 
} 
public void setSpeaker(String speaker) { 
    this.speaker = speaker; 
} 
public float getStartTime() { 
    return startTime; 
} 

@XmlAttribute 
public void setStartTime(float startTime) { 
    this.startTime = startTime; 
} 

@XmlAttribute 
public float getEndTime() { 
    return endTime; 
} 
public void setEndTime(float endTime) { 
    this.endTime = endTime; 
} 

@XmlValue 
public String getContent() { 
    return content; 
} 
public void setContent(String content) { 
    this.content = content; 
} 
} 

Aber wenn ich w ant zum Beispiel den Wert von Turn zu lesen, wo Sprecher gleich "spk1 spk2" ist, die Methode getContent von Turn return nur "zweiten Wert!" .. Wie kann ich den gesamten Inhalt mit "ersten Wert!" ? Ich weiß nicht erlaubt ist XmlElement mit XmlValue für ein Element zu setzen, aber ich habe keine andere Wahl, sind die XML-Dateien so, und ich möchte, dass mit vielen Dateien arbeiten ..

Vielen Dank im Voraus :)

Antwort

0

Sie beschäftigen sich also mit gemischten Inhalten. Schauen Sie sich die andere Frage how-to-deal-with-jaxb-complextype-with-mixedcontent-data und jaxb-xmlmixed-usage-for-reading-xmlvalue-and-xmlelement an. Es wäre mit der Anmerkung @XmlMixed für Ihre Turn Klasse handhabbar. Dann bin ich nicht ganz sicher, ob Sie die Getter- und Setter-Methoden für den Inhalt benötigen.

+0

Schön! Ich mache eine neue Attributliste mit @XmlMixed, dann gebe ich meinen gesamten Inhalt zurück! Danke Loic M. – Limmy

0

Ich denke, dass Sie Problem von Ihrer Erklärung @XmlElement(name="Turn") kommt. Wenn Sie einen Blick auf die folgenden tutorial from Vogella haben, sehen Sie, er wird mit einem Wrapper für seine Liste durch die Annotation XmlElementWrapper und legen die Anmerkungen bei der Deklaration der Liste, nicht vor dem Verfahren, wie folgend:

// XmLElementWrapper erzeugt ein Wrapper-Element um XML-Darstellung @XmlElementWrapper (name = "booklist")

// XmlElement setzt den Namen des Entitäten @XmlElement (name = "Buch") private Arraylist booklist;

In Ihrem Fall denke ich JAXB ein Objekt zu verwalten, wenn Sie erwarten, dass es mit einer Liste von Objekten zu tun hat.

+0

JAXB verwalten eine wirklich Liste von Objekten, weil, wenn ich meine xml laden getTurn() eine Liste der Umdrehung wie folgt für das vorherige Beispiel zurückgeben: 0: Drehen mit Inhalt gleich: "un souci avec une inschrift" 1: Dreh dich mit Inhalt gleich: "ouis" 2: Dreh mit Inhalt gleich: "zweiter Wert!" Hier fehlt der erste Wert. – Limmy

+0

OK, ich habe zuerst nicht verstanden, dass der Wert des Turn-Elements mit deinen 'Who'-Elementen geteilt wird. Recht seltsam. Sind Sie sicher, dass die Definition Ihrer Eingabe-XML sinnvoll ist? –

+0

Nein, ziemlich sicher, dass sie falsch sind, aber sie gehören mir nicht, ich muss damit arbeiten. – Limmy

Verwandte Themen