JaxB自动将XML解析成Java类

5

我对jaxb比较陌生。我的问题是:使用jaxb,是否可以将xml文件自动映射到Java对象中?从xml文件开始,是否有一些工具可以生成带有jaxb注释的Java类?


2
你需要一个XSD,而不仅仅是XML。请查看 xjc - Xavi López
我该如何生成xsd文件?你可以自动完成吗? - Gaetano Tortora
1
可以从一些示例XML推断出XSD。请参见我的回答。但是,如果您知道结构,最好拥有真实的XSD或自己设计它。 - Xavi López
2个回答

6
确实是可能的。但是,您需要一个XSD而不是XML文件。有一些工具(例如Trang)可以从一个或多个示例XML文件推断出XSD。
请注意,使用工具生成此XSD可能会得到不准确的结果,如果XML示例不完整,或者模式无法在单个XML文件中完全表示(独占元素等)。
一旦您拥有XSD,请使用xjc来生成编组器/解组器类。
xjc myxsd.xsd

这将生成JAXB用于编组/解组的注释类。请注意,您也可以自己编写这些类。一旦您拥有它们,只需在代码中使用它们:

File file = new File("myFile.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(MyRootElement.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
MyRootElement element = (MyRootElement) jaxbUnmarshaller.unmarshal(file);

谢谢您的回答,但我有另一个问题。在执行xjc myxsd.xsd时,我遇到了以下异常: java.lang.IllegalArgumentException: Illegal pattern character 'g' 这是什么意思? - Gaetano Tortora
似乎在JAXB 2.2.6中存在一个相关的错误,特别影响意大利语环境。看起来在2.2.7中已经修复了。您可能会发现这个问题有用:无法使用JAXB生成类。 - Xavi López

1
是的,JAXB自动进行marshallingunmarshalling,但需要一个模式文件。 JaxB用于将XML与Java对象绑定。使用XSD模式文件,它可以进行marshalling和unmarshalling。有一些简单的ant任务,如XJC可供使用。

1
JAXB (JSR-222) 的实现只有在你想要生成 Java 类时才需要 XML Schema。如果你从 Java 类开始,则不需要 XML Schema。 - bdoughan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接