2011-04-22 150 views
0

我使用JAXB将我的对象写入Java中的XML文件。它成功写入。我检查XML文件,所有的值都是真实的。但是当我想读取这个XML文件时,一些元素值会改变。你有什么想法吗?JAXB XML解析问题

我的表类有2个实例,其类型是行列表(行类)和类型(从类型类)。

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

下面是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

你能张贴ReadXML的功能?另外,您可以发布写入/编组XML的代码吗? – Pace 2011-04-22 18:10:23

+0

对不起,我发送 – onurbaysan 2011-04-22 18:15:57

+1

什么值改变了?另外,如果将加载的XML写回文件,它是否与原始XML不同? – 2011-04-22 18:24:34

回答

0

@XmlElements

的@XmlElements注解用于表示XML模式的选择结构。因此,而不是:

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

你只需要:

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

@XmlElementWrapper

如果你想有一个分组元素(“行“)围绕你的”行“ “元素,你可以使用@XmlElementWrapper注释:

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

这会给你的XML:

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

问题是由Type类造成的,我想。它的一些属性在从XML读取时发生变化 – onurbaysan 2011-04-24 21:22:29

+0

好的,我纠正了这个问题。我在使用XMLRootElement时遇到了错误 – onurbaysan 2011-04-25 09:53:00