从给定Java对象生成特定XML的最佳实践
设置 有一个旧的应用程序可以生成PDF格式的报告。它使用XML文档(包含报表数据)和XSLT(描述报表布局)以及ApacheFop生成PDF。此应用程序将被新的应用程序替换 新的应用程序以JavaBean的形式包含报表数据(它们是Hibernate注释的实体)。不再有XML文档了 意图 为了“节省”时间,已经决定XSLT应该保持原样。此外,apachefop库也被再次使用。这就留下了XML文档 其目的是以某种方式获取表示报表数据的Java对象树(hibernate实体),并以给定XSLT仍能理解的方式生成XML文档(无需更改XSLT) 建议的解决方案从给定Java对象生成特定XML的最佳实践,java,xml,object,Java,Xml,Object,设置 有一个旧的应用程序可以生成PDF格式的报告。它使用XML文档(包含报表数据)和XSLT(描述报表布局)以及ApacheFop生成PDF。此应用程序将被新的应用程序替换 新的应用程序以JavaBean的形式包含报表数据(它们是Hibernate注释的实体)。不再有XML文档了 意图 为了“节省”时间,已经决定XSLT应该保持原样。此外,apachefop库也被再次使用。这就留下了XML文档 其目的是以某种方式获取表示报表数据的Java对象树(hibernate实体),并以给定XSLT仍能理解
- 建议的解决方案需要花费大量时间编写Java类,或多或少地对预期的XML文档结构进行建模
- JAXB 2
- XMLStreamWriter
- 棒极了
- 斯卡拉
- 还有别的吗
- 所需的XML文档没有XML架构或DTD
- 涉及
第二种方法是编写自己的xml生成器,可以使用反射(直接或通过java.beans.beandescriptor)使代码通用。使用JAXB将文档从POJO转换为xml。然后使用XSLT将XML转换为当前XSLT所期望的格式:JAXBSource->XSLT->XSLT->DOMDRESULT/StreamResult->PDF
查看有关如何链接多个转换的信息。Groovy是构建XML的一种非常简单的方法,值得一试。查看GroovyXMLBuilder特性。仅供参考,使用Groovy(XMLSlurper)读取XML也非常容易。也许有一天知道会很好。@MikeThomas我倾向于同意,因为它朝着“写下XML”的方向发展。例如,使用似乎就是这样。剩下的唯一问题是,将POJO中的数据放到该结构中有多容易(我认为这很容易),以及它对更大的文档的执行情况如何?从POJO构建动态文档比通常的静态示例要复杂一些,但为了避免使用工具,这是一个非常好的解决方案。我们在一个项目中使用Groovy通过HTTP响应格式化简单的XML,它非常适合那些小文档。Slurper也非常适合使用较小的文档。较大的文档可能会让您暂停,因为代码整体可读性可能会降低,在这种情况下,序列化方法可能会更好,正如其他人所提到的。YMMV一如既往。你的答案似乎与@GerritCap的答案相似。他建议不要使用JAXB,而是使用XMLEncoder。想法是一样的,首先用某种结构物化XML,然后应用XSLT转换将其转换为预期的报告数据XML结构。XMLEncoders输出格式不是最容易使用的。此外,您不能将XSLT与XMLEcoderReading@MikeThomas链接最后一条评论我认为我的问题已经得到了回答,我认为您的方法可能是最好的。第一种方法是将POJO转储为XML,然后制定XSLT,将转储的XML转换为所需的XML。好啊(然而,我对编写XSLT并不是特别兴奋,但这只是我个人的观点)。编写自己的XML生成器似乎不是解决这个问题的快速(也是最好的)解决方案。我认为你的第一个答案更好。