2011-04-22 198 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