我有存储在结构化XML中的数据,我希望使用XSLT(或其他替代方法)使其更具可读性。目标文档应该有很多文本实例在同一行左右对齐,我需要有一个类似div floats的行为:
<div style="float: left;">
<p align=left>
Left text. Left text. Left text. Left text. Left text. Left text.
</p>
</div>
<div style="float: right;">
<p align=right>
Right text. Right text. Right text. Right text. Right text. Right text.
</p>
</div>
<div style="clear: both;" />
这样,当两者的文本长度都大于容器宽度时,将写入“Left text”DIV,然后在其下面写入“Right text”DIV。
我不能使用XSLT生成HTML文件,因为它将在打印中使用,而且我还需要一种在分页符处具有“保持一致”功能的语言(如果分页符出现在元素的中间,它应该在元素之前断开)。拥有支持自动调整列大小的表(如HTML表)将是一个巨大的优势,但不是必需的。
我在研究XSL-FO,但找不到支持这些特性的免费呈现程序。我曾想过使用XSL来生成WordML文件,但还没有找到任何关于它的教程。有一个Word(或Open Office)文档会很好,因为我可以做一些小的调整。另外,我正在考虑使用乳胶。
你有什么建议吗?
编辑:我正在检查一些我不知道的CSS功能(多年来没有弄乱过它),它确实有一些与打印相关的功能(内部分页符:avoid,@page,等等),除了对浮动和表的自动布局有出色的支持。尽管打印功能没有得到广泛的支持,Opera和IE确实支持它,我在IE9中运行了一些测试,结果显示效果非常好。因此,我将尝试使用HTML/CSS的XSLT,因为它拥有我所需要的一切,并且有一个更平滑的学习曲线(我已经知道一些CSS,并且已经使用HTML多年)。
最佳答案
我认为您应该通过使用一些众所周知的XML标准模式(如DITA或DOCBOOK)来决定一种更通用的方法来解决您的问题。
这些模式的优点是允许您编写自己的XML,并根据需要根据它们支持的输出格式呈现它。而且,它们是免费的,一旦您有了corret源文档,就可以轻松地获得PDF、RTF、WebHelp、HTML等。
所以,你需要:
做你的决定,DITA还是DOCBOOK?
编写一个transfrom来获取XML并将其转换为特定的标准DITA或DOCBOOK
决定用于管理所选标准的工具,并测试可以从中获得的所有输出,并查看哪个更适合。
如果您决定使用DITA,您有两个自由选择:
DITA-OT公司
迪塔克
就个人而言,我将使用DITA和DITAOT,因为它具有基于XSLT和基于Ant的自定义构建的插件的灵活性。但两者都有各自的原因。我从DITA-OT开始,最后使用了DITA-OT和DITAC。
我没有在这里放任何参考,因为你可以很容易地找到你需要使用谷歌。
关于FLOAT
DITA-OT提供了一个称为PDF2的特定XSL-FO转换类型,其XSL-FO处理器是RenderX。RenderX目前支持fo:float,所以我想您可以找到您的方法。可能需要重写一些PDF2模板,这比实现自己的PDF转换要简单得多。
请注意,RenderX是可行的,只要在每一页上有一个小的脚水印是可以接受的。否则你应该花点钱。