2011-04-22 4 views
0

J'utilise JAXB pour écrire mes objets dans un fichier XML en Java. Il écrit avec succès. Je vérifie le fichier XML et toutes les valeurs sont vraies. Mais quand je veux lire ce fichier XML, certaines valeurs d'éléments changent. Avez-vous une idée?Problème d'analyse XML JAXB

Ma classe Table a 2 instances dont les types sont Liste des lignes (Classe de ligne) et Type (de Classe de type).

Table t = tester.readXML("tables/course.xml"); 

List<Row> rows = new LinkedList<Row>(); 
rows.addAll(t.getRows()); 

for(Row r : rows) 
    System.out.println(r.getName() + " " + r.getType().getIsPrimary()); 
} 

Voici les méthodes Reader XML:

public Table readObject(String filepath) throws JAXBException { 

     JAXBContext jc = JAXBContext.newInstance(Table.class); 
     Unmarshaller u = jc.createUnmarshaller(); 
     Table hw = (Table) u.unmarshal(new File(filepath));  
     return hw; 
    } 

public Table readXML(String file) { 
    try { 
     File f = new File(file); 
     if(f.exists()) { 
      Table t = new Table(); 
      t = readObject(file); 
      return t;    
     }   
    } catch (JAXBException e) {   
     e.printStackTrace(); 
    } 
    return null; 
} 
+0

Pouvez-vous poster la fonction ReadXML? Aussi, pourriez-vous poster le code qui écrit/marshals le XML? – Pace

+0

désolé, je l'envoie – onurbaysan

+1

Quelles sont les valeurs qui ont changé? De même, si vous réécrivez le fichier XML chargé dans le fichier, cela devient-il différent du fichier XML original? –

Répondre

0

@XmlElements

L'annotation @XmlElements est utilisée pour représenter une structure de choix de schéma XML. Ainsi, au lieu de:

@XmlElements(value = { @XmlElement(name ="row") }) 
private List<Row> rows = new LinkedList<Row>(); 

Vous avez seulement besoin:

@XmlElement(name ="row") 
private List<Row> rows = new LinkedList<Row>(); 

@XmlElementWrapper

Si vous voulez avoir un élément de regroupement ("lignes ") entourant votre" rangée "Éléments vous pouvez utiliser l'annotation @XmlElementWrapper:

@XmlElementWrapper 
@XmlElement(name ="row") 
private List<Row> rows = new LinkedList<Row>(); 

Cela vous donnera le XML:

<rows> 
    <row>...</row> 
    <row>...</row> 
</rows> 
+0

Le problème est causé par la classe Type, je pense. Ses attributs changent lors de la lecture de XML – onurbaysan

+0

Ok je corrige le problème. J'ai eu des erreurs à propos de l'utilisation de XMLRootElement – onurbaysan