【发布时间】:2015-01-29 21:49:43
【问题描述】:
我正在为我的学士论文尝试使用 XSLT 将一些 XML 数据转换为 HTML。
我的教授希望我也考虑 XSL-FO,或者至少写一些关于它的文字。但我对此很菜鸟。
所以我的问题是:
我可以将 FO 与 HTML 结合起来吗?我可以使用 FO 代替 HTML 和 CSS 吗?如果是,我的浏览器将如何呈现?有没有关于如何使用 FO 将 xml 转换为网页的示例/教程?
【问题讨论】:
我正在为我的学士论文尝试使用 XSLT 将一些 XML 数据转换为 HTML。
我的教授希望我也考虑 XSL-FO,或者至少写一些关于它的文字。但我对此很菜鸟。
所以我的问题是:
我可以将 FO 与 HTML 结合起来吗?我可以使用 FO 代替 HTML 和 CSS 吗?如果是,我的浏览器将如何呈现?有没有关于如何使用 FO 将 xml 转换为网页的示例/教程?
【问题讨论】:
从 XSLT 生成 XSL-FO 和 XHTML 不一定是非此即彼的选择。
XSL-FO 一般用于生成 PDF。为此,您需要一个 XSL-FO 引擎,例如 FOP、RenderX、Antenna House、IBex 等。但是,您可以转换 XSL-FO 转换成 XHTML,然后在浏览器中呈现。
一般来说,让你的 XSLT 创建 XSL-FO 然后转换成 XHTML(直接生成 XHTML)是不值得的,除非你想轻松创建两种输出格式(PDF 和 XHTML)。
可以同时创建 **XSL-FO 和 XHTML 而无需维护两套完整的样式表以在不同的词汇表中创建相似的输出** .
您不必在一种格式或另一种格式之间进行选择,也不必维护两个截然不同(但相似)的样式表库,您可以创建主样式表库来生成 XSL-FO 或 XHTML,然后使用第二个转换将 从 XSL-FO 转换为 XHTML,反之亦然-反之亦然。 您可以利用现有的 XSLT 样式表来执行此操作。
过去我开发了 XSL-FO 样式表,然后使用Render-X FO2HTML stylesheet 将 XSL-FO 转换为 XHTML 输出。它将<block>元素转换为<div>,<inline>转换为<span>等。
我以前没用过,但你也可以尝试使用HTML2FO stylesheets 将XHTML 输出转换为XSL-FO。
开箱即用,您可以获得两种格式的惊人相似输出,同时维护一个专用于一种特定输出格式的 XSLT 库。
如果您碰巧需要稍微自定义输出(例如 XHTML 的不同标题内容),那么您只需要导入/扩展转换样式表并覆盖不同的适当模板内容。这使得维护变得更加容易,因此您不必担心使用基本相同的信息更新多组样式表。
【讨论】:
XSL-FO 仅用于 PDF 显示(严格来说这并不正确,但您可以将其作为指导原则)。所以 HTML 输出和 FO 输出是不相关的。从您的 XML 源中,您可以使用 XSLT 生成 XHTML 或 XSL-FO,但不能同时生成两者。
参见例如 DocBook。它带有几个可以使用的 XSLT 样式表,一个用于 HTML 输出,一个用于 PDF(通过 Apache Fop)。如果您对结果感到满意可能是另一个问题。
【讨论】: