3

几天来,我一直在思考这个问题并尝试了不同的方法,并且搜索了 SO(请参阅将 XML 转换为 Java 对象的最佳实践是什么?)以及 Google 使用 JAXB over XSLT 但不能找到合适的答案。多年来,我在各种项目中使用过 Castor、JIBX 和 XSLT,因此我对 XML 绑定有所了解。

我的问题是我有一个非常扁平的 XML 结构,我想将它解组为 Java 类并将它们直接保存到关系数据库(必须是 Oracle)。一个小例子...

<Output>
    <Channel>
        <channelId>1</channelId>
        <genreId>1</genreId>
    </Channel>
    <Channel>
        <channelId>2</channelId>
        <genreId>2</genreId>
    </Channel>
    <Genre>
        <genreId>1</genreId>
        <name>Movies</name>
    </Genre>
    <Genre>
        <genreId>2</genreId>
        <name>Sport</name>
    </Genre>
    <ChannelName>
        <channelId>1</channelId>
        <name>The Movie Channel</name>
    </ChannelName>
    <ChannelName>
        <channelId>2</channelId>
        <name>The Sport Channel</name>
    </ChannelName>
</Output>

对于上面的 XML,我真正想要的只是 OneToOne 关系中的两个简单带注释的类,我可以使用 JPA 持久化它们。基本上我想要像这样反映数据库表的类:

class Channel {
    Long id;
    String name;
    Genre genre;        
}

class Genre {
    Long id;
    String name;       
}

XML 只会被解组,我真的在寻找这个问题的最简单的解决方案,我意识到这可能是一个主观问题。

我是 XSLT 的粉丝,所以我真的想问如果使用 XSLT 将原始 XML 弯曲成更好的结构,与代码更紧密匹配,然后只使用一些非常简单的 JAXB 注释来绑定到我的类,这是否是一个好的设计。或者我应该选择使用 JAXB 进行“转换”,我认为这将涉及更多实际的 Java 代码,例如XMLAdapters 和更多注释。基本上,与 XSLT 相比,JAXB 有什么好处,或者还有什么其他好处?

4

3 回答 3

15

JAXB 是 Java 对象到 XML 绑定 API。

XSL-T 将 XML 转换为 XML。

他们对我来说感觉不一样。最终结果可能是 XML,但每种情况下的源都不同。

我认为答案取决于您对每种技术的舒适程度。如果您觉得 XSL-T 和 JAXB 的组合很自然,那么一定要朝那个方向发展 - 除非它是重复执行的运行时操作。在这种情况下,我会说性能可能是一个问题,具体取决于转换的复杂性。

于 2011-04-01T19:42:16.160 回答
2

我建议看一下XStream,特别是它的Converters API。

XStream 提供了一种非常简单的方法来将 XML 序列化或反序列化为 Java,而无需提供 XSD(我相信 JAXB 将需要它)。

于 2011-04-01T19:49:04.993 回答
0

看看ReXSL,一个在 JAX-RS 之上集成 JAXB 和 XSL 的 Web 开发框架。该站点将每个页面生成为带有 JAXB 注释的对象,该对象由框架转换为 XML。然后,这个 XML 与附加的 XSL 样式表一起传递给浏览器。

于 2012-10-30T17:50:58.767 回答