我有xsd和xml文件。首先我从xsd文件生成了Java类,该部分已经完成,现在我必须使用xml将数据提供给对象?我正在使用下面的代码,但这是抛出JAXBException。
try {
File file = new File("D:\\file.xml");
JAXBContext jaxbContext = JAXBContext.newInstance("com.jaxb.generated");
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Employee empObj = (Employee) jaxbUnmarshaller.unmarshal(file);
System.out.println(empObj.getName());
} catch (JAXBException e) {
e.printStackTrace();
}
这是我的xml文件,其中包含两个类:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Employee> <name>John</name> <salary>5000</salary> </Employee> <Customer> <name>Smith</name> </Customer>
有人能帮助我吗?
答案 0 :(得分:3)
重要强>
您的代码中存在错误。您跳过了这一步:
JAXBElement element = (JAXBElement) jaxbUnmarshaller.unmarshal(f);
好吧,我很久以前就和 JAXB 一起工作过。
然而,我们过去常常在这样的情况下定义一个包含其他元素的顶级元素(在Java代码或xsd文件中)。
<强> e.g:强>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<People>
<Employee>
<name>John</name>
<salary>5000</salary>
</Employee>
<Customer>
<name>Smith</name>
</Customer>
</People>
Java将生成Employee和Customer类作为People的子项。
您可以通过以下方式在JAXB代码中迭代它:
try {
File file = new File("D:\\file.xml");
JAXBContext jaxbContext = JAXBContext.newInstance("com.jaxb.generated");
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
JAXBElement element = (JAXBElement) jaxbUnmarshaller.unmarshal(file);
People people = (People) element.getValue();
Employee employee = (Employee)people.getChildren().get(0); // the name of the getChildren() methodm may vary
Customer customer = (Customer)people.getChildren().get(1);
System.out.println(empObj.getName());
} catch (JAXBException e) {
e.printStackTrace();
}
您可能还想看看这个类似的问题:iterate-through-the-elements-in-jaxb
答案 1 :(得分:3)
您问题中的XML文档无效。 XML文档需要有一个根元素。第一步是确保您的XML文档对您生成类的XML模式有效。