【问题标题】:JaxB automatic parsing from XML to Java classes从 XML 到 Java 类的 JaxB 自动解析
【发布时间】:2013-04-30 02:10:48
【问题描述】:

我是 jaxb 的新手。我的问题如下:使用 jaxb,是否可以从 xml 文件自动映射到 java 对象? 从xml文件开始,有没有什么东西可以生成带有注释jaxb relaitve的Java类?

【问题讨论】:

  • 您需要一个 XSD,而不仅仅是 XML。查看xjc
  • 如何生成 xsd 文件?您可以自动执行此操作吗?
  • 可以从许多示例 XML 中推断出 XSD。见my answer。但是,拥有真正的 XSD 可能会更安全,或者如果您知道其结构,则自己设计它。

标签: java xml xml-parsing jaxb


【解决方案1】:

确实有可能。但是,您需要 XSD 而不是 XML 文件。有一些工具(例如Trang)可以从一个或多个示例 XML 文件推断 XSD。

请注意,如果 XML 示例不完整,或者如果架构无法在单个 XML 文件中完全表示(专有元素等),则使用工具生成此 XSD 可能会得到不准确的结果。

拥有 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' 这是什么意思?
  • 似乎有一个带有 JAXB 2.2.6 的 related bug 并特别影响意大利语言环境。似乎在 2.2.7 中已修复。您可能还会发现这个问题很有用:cannot generate classes with JAXB
【解决方案2】:

是的,JAXB 自动执行 marshallingunmarshalling,但它需要架构文件。 JaxB 用于将 XML 与 Java 对象绑定。使用XSD 模式文件,它进行编组和解组。很少有像 XJC 这样简单的 ant 任务可以使用。

【讨论】:

  • JAXB (JSR-222) 实现仅需要 XML 模式才能生成 Java 类。如果您从 Java 类开始,则不需要 XML 模式。
猜你喜欢
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
相关资源
最近更新 更多