2013-05-20 54 views
1

我一直在搜索网页,但没有找到符合要求的任何内容,我不知道该怎么办。我知道这已被问了好几次,但不完全一样。我们有一些大的XML文件(仍然不知道大小,但我估计小于1GB)。我们只需要这些文件的一部分(只有一部分XSD对我们有用),我们必须阅读并存储在数据库中。将来我们可能需要重新创建XML文件,但这不在第一阶段。哪个XML解析impl只解析XML的一部分并将其存储在数据库中

那么,我已经看到,对于这样的事情更好地使用JAXB,但我有点与JAXB实现混淆。我们有JDK实现,还有Castor,Metro和EclipseLink Moxy,我想我至少还见过两种实现。最好将这个XML绑定到POJO类,然后用JPA保存到DB中?有没有比我列出的更好的实施?我列出的任何一个都过时了? (我问这是因为我访问过的很多页面都很老,不确定过去几年是否有变化)

当然,性能很重要,但重要的是我们只需要部分包含在XML中的元素。顺便说一句,这是用于SG1-XML标准。

在此先感谢。

回答

0

备注:我是EclipseLink JAXB (MOXy)的领导者,也是JAXB (JSR-222)专家组的成员。

JAXB (JSR-222)是XML绑定的Java标准,它被其他标准(如JAX-WS(SOAP Web服务)和JAX-RS(RESTful Web服务))利用。

  • Project JAXB(新城的一部分)是参考实现,并且包括在JDK/JRE的最implementationjs从它派生的JAXB的版本。
  • EclipseLink MOXy是一个JAXB兼容的实现,通过了所有必要的一致性测试。它提供了有用的扩展,例如基于路径的映射和为映射JPA实体提供额外的支持(EclipseLink还提供了JPA实现)。
  • Castor - Castor似乎提供至少部分的JAXB实现(请参阅:http://docs.codehaus.org/display/CASTOR/Castor+JAXB)。一般来说,我会建议远离任何只实现规范一部分的东西。

由于该文件是大的,你只需要它的一部分,我会建议使用相结合的JAXB实现了StAX的解析器。您可以使用XMLStreamReader前进到您希望解组的文档部分,并仅解开所需的组块。


哪一个是最好的这个XML到POJO类绑定,然后 坚持使用JPA到DB?

由于MOXy是EclipseLink的一个组件,它是JPA参考实现,我们在这些用例上花费了大量的精力。我是MOXy的领导者,我与前基于JPA的合作伙伴Mike Keith共享一个隔间墙。

+0

谢谢,布莱斯,我会看看你的链接。我也同意远离仅实现部分规范的东西;) – EAmez

+0

我们通常在我们的项目中使用Hibernate。我们已经生成了带有或不带有Moxy的JAXB类,并且我在生成的对象间看到的唯一区别是ObjectFactory类和注释中的一些细微差别。因此,对于简单的使用(阅读并提交给DB),我并不认为有任何好的理由将moxy的jar添加到我的项目中。我必须承认,我不习惯这种技术,但是有什么我失踪? - 我一直在和我的同事争吵,为什么我们应该使用这个或那个,我已经失去了讨论:(。 – EAmez

+0

@EAmez - 我正在考虑从Java对象开始,你可以利用事物像MOXy的'@ XmlInverseReference'扩展名:http://blog.bdoughan.com/2010/07/jpa-entities-to-xml-bidirectional.html –