JAXB相对于XSLT有什么好处?

时间:2011-04-01 19:38:44

标签: java jaxb xslt unmarshalling

我一直在讨论这个问题并且尝试了几天不同的方法我已经搜索了SO(参见What is best practice in converting XML to Java object?)以及Google搜索使用JAXB而不是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代码,例如XMLAdapter和更多注释。基本上,有什么好处,或者JAXB通过XSLT给我什么呢?

3 个答案:

答案 0 :(得分:15)

JAXB是Java对象到XML的绑定API。

XSL-T将XML转换为XML。

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

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

答案 1 :(得分:2)

我建议您查看XStream,特别是其Converters API。

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

答案 2 :(得分:0)

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