JAXB XML解析问题

时间:2011-04-22 18:03:23

标签: java xml parsing jaxb xml-parsing

我使用JAXB将我的对象写入Java中的XML文件。它写得很成功。我检查XML文件,所有值都是true。但是当我想读取这个XML文件时,一些元素值会发生变化。你有什么想法吗?

My Table类有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 Reader方法:

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

1 个答案:

答案 0 :(得分: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>