3

我有 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>

有人可以帮助我吗?

4

2 回答 2

3

重要的

您的代码中有错误。你跳过了这一步:

JAXBElement element = (JAXBElement) jaxbUnmarshaller.unmarshal(f);


好吧,我很久以前就与JAXB合作过。

然而,在这种情况下,我们习惯于定义一个包含其他元素的顶级元素(在 Java 代码或 xsd 文件中)。

例如:

<?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

于 2012-06-23T06:56:01.660 回答
3

您问题中的 XML 文档无效。XML 文档需要有一个根元素。第一步是确保您的 XML 文档对生成类的 XML 模式有效。

于 2012-06-23T10:02:27.763 回答