Проблема синтаксического анализа XML JAXB - PullRequest
0 голосов
/ 22 апреля 2011

Я использую JAXB для записи своих объектов в XML-файл на Java.Пишет успешно.Я проверяю XML-файл и все значения верны.Но когда я хочу прочитать этот 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 голосов
/ 23 апреля 2011

@ 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>
...