【发布时间】:2014-05-13 00:07:32
【问题描述】:
我正在尝试使用 JAXB Unmarshaller 将 xml 文档转换为 java 对象树。
XML 文档如下所示:
<Levels>
<Level>
<Solution>
<Piece x="0" y="1">
<Shape/>
<Color/>
</Piece>
<Piece x="0" y="1">
<Shape/>
<Color/>
</Piece>
</Solution>
<Clues>
<Clue>
<Piece x="0" y="0">
<Shape/>
<Color/>
</Piece>
</Clue>
<Clue>
<Piece x="0" y="0">
<Shape/>
<Color/>
</Piece>
</Clue>
</Clues>
</Level>
</Levels>
我创建了非常基本的类来保存每个组件:
Levels.java:
@XmlRootElement
public class Levels {
private List<Level> levels = new ArrayList<Level>();
@XmlElementRef(name="Level")
public List<Level> getLevels() {
return levels;
}
public void setLevels(List<Level> levels) {
this.levels = levels;
}
}
Level.java:
@XmlRootElement(name="Levels")
public class Level {
private Solution solution = new Solution();
private Clues clues = new Clues();
@XmlElementRef(name="Solution")
public Solution getSolution() {
return solution;
}
public void setSolution(Solution solution) {
this.solution = solution;
}
@XmlElementRef(name="Clues")
public Clues getClues() {
return clues;
}
public void setClues(Clues clues) {
this.clues = clues;
}
}
其余类的格式与这些相同(相同的注释,只有 getter 和 setter 方法)
我用来解组 xml 的代码是:
File file = new File("res/levelTest.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Levels.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Object o = jaxbUnmarshaller.unmarshal(file);
System.out.println(o);
我遇到的问题是,当我打印对象时,它打印的是 newXML.Solution@*** 而不是 newXML.Levels@*** 这是根元素。这意味着解组器正在返回根元素以外的元素。我已经搜索了谷歌和堆栈溢出,但我找不到对此的解释。
感谢任何帮助。
【问题讨论】: