我想将基于 jaxb 的 xml 文件读入我的面向对象结构。
可以说这是我的 xml 文件:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<children xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<child xsi:type="girl">
<age>12</age>
<isdancing>true</isdancing>
</child>
<child xsi:type="boy">
<age>10</age>
<issoccerplayer>true</issoccerplayer>
</child>
</children>
Children是某种包含多个子元素的包装元素。孩子可以是 xsi : type 指定的男孩或女孩。这两个类有一些共同的元素(如age)和一些不同(排除)的元素(如isdancing或issoccerplayer)
要读取文件,我有这个方法:
public static void main( String[] args ) throws JAXBException
{
JAXBContext jaxbContext;
jaxbContext = JAXBContext.newInstance(Children.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
File file = new File("C:/test.xml");
if (!file.exists()) System.out.println("File does not exist");
Children children = (Children) jaxbUnmarshaller.unmarshal(file);
System.out.println(children.toString());
}
我的孩子们的班级是这样的:
@XmlRootElement(name="children")
@XmlAccessorType(XmlAccessType.FIELD)
public class Children {
@XmlElement(name="child")
private List<Child> childrenList;
public List<Child> getChildren() { return childrenList; }
public void setChildren(List<Child> children) {this.childrenList = children;}
@Override
public String toString() {
return ReflectionToStringBuilder.toString(this);
}
}
我的孩子班看起来像这样:
@XmlAccessorType(XmlAccessType.FIELD)
public class Child {
@XmlAttribute(name="xsi:type")
private XsiType xsiType;
private int age;
@XmlElement(name = "isdancing")
private boolean isDancing;
}
}
我现在的问题是,输出正常,但 Child-class 的元素 xsiType 始终为 null,否则最终会出现 IllegalAnnotationExceptions,这与 XmlTest.model.Child.xsiType 相关
所以我预计设置任何类型的 @Xml-Annotation 都会出现错误。有人可以帮我找出错误吗?
目标是迭代孩子列表并在运行时(基于 xsiType)决定这是女孩还是男孩。
千巷猫影
慕无忌1623718
慕哥6287543
相关分类