2

环境

有一个旧应用程序可以生成 PDF 格式的报告。它使用 XML 文档(包含报告数据)和 XSLT(描述报告布局)与 Apache FOP 一起生成 PDF。此应用程序将被新应用程序取代。

新应用程序包含作为 Java Bean 的报告数据(它们是 Hibernate 注释实体)。不再有 XML 文档。

意图

为了“节省”时间,已决定 XSLT 应保持原样。Apache FOP 库也被再次使用。这将留下 XML 文档。

其目的是以某种方式获取表示报告数据的 Java 对象树(休眠实体),并以给定 XSLT 仍可理解的方式生成 XML 文档(无需更改 XSLT)。

建议的解决方案

  1. 根据表示报表数据的 Hibernate 对象树创建第二个对象树。(也用 JAXB 注释来注释 Hibernate 注释的实体似乎是错误的。)
  2. 使用 JAXB 2 注释对新的仅报告数据类进行注释,以便将它们编组为与 XSLT 所理解的旧 XML 文档足够相似的 XML 文档。

问题

  • 建议的解决方案花费大量时间编写 Java 类,或多或少地对预期的 XML 文档结构进行建模。

问题

有没有更好更快的方法?

似乎只是想“写下”包含在“正确”位置填写的报告数据的 XML 文档。

可能的解决方案空间非常开放。你会用什么,为什么?

  • JAXB 2
  • XMLStreamWriter?
  • 时髦?
  • 斯卡拉?
  • 还有什么?

笔记

4

2 回答 2

1

使用 JAXB 将您的文档从 POJO 转换为 XML。然后使用 XSLT 将 XML 转换为当前 XSLT 期望的格式:JAXBSource -> XSLT -> XSLT-> DOMResult/StreamResult -> PDF。

检查Java 中的 Efficient XSLT 管道(或将结果重定向到源)以获取有关如何链接多个转换的信息。

于 2013-09-27T00:53:04.497 回答
0

我想到了2个解决方案,

一种是使用 java.beans.XMLEncoder 并创建一个通用的前处理 xslt,它将 XMLEncoder 生成的 xml 转换为当前的 xml 数据

二是编写自己的 xml 生成器,可能会退回到反射(直接或通过 java.beans.BeanDeescriptor)以使您的代码通用。

于 2013-09-26T22:27:01.320 回答