我们如何在XSLT中将Microsoft Word DOCX文件转换为HTML?

6

我有一个关于将Word DOCX XML(OOXML)文件转换为HTML格式的项目。

我使用XML Spy和XSLT、XPath、XML进行转换。

想象一下一个单独的Word文件,我编写了一个XSLT程序并对其进行转换。但我的主管说,如果我更改文件中的值,这种方法就行不通了。

我同意这一点,因为我只为那个文档指定了代码,因为我知道它包含什么。

但是,我们如何编写通用的XSLT代码来将所有Word文件转换为格式良好的HTML文档(因为每个Word文档可能都不同)?

问题在于我正在尝试使用XSLT来解决它吗?这里有什么问题吗?还是我只是在这方面过于混乱了。

3个回答

7
您使用XSLT将DOCX文件转换为HTML的计划基本上是可行的。 XSLT非常适用于将XML映射到XML(或(X)HTML),因此非常适合此目的。
您面临的挑战是,DOCX底层的XML非常复杂。仅Ecma Office Open XML Part 1 - Fundamentals And Markup Language Reference就有超过5K页。如果您熟悉XML、XML命名空间、XSLT、HTML和CSS,那么您只需要学习一些OOXML的基础知识就可以开始了。
如果您牢固地掌握OOXML,并始终以稳健的方式进行更改,则不必担心更改值的问题。从段落中的文本运行开始:w:tw:rw:pEric White在OOXML方面写得非常全面,甚至特别是将其转换为HTML。请查看Transforming Open XML WordprocessingML to XHtml,其中包含了优秀的文章和示例。

0

我已经使用旧的Word XML输出完成了这个任务。我进行了一些研究,比较了旧的Word XML和新的docx格式。它们非常相似。对于我来说,docx是一个多文件存档并不是问题,因为我使用在Java中运行的Saxon XSLT,并且可以使用jar文件URL打开word/document.xml文件,从而使用document() XPath函数访问所有其他文件。

我发现诀窍就是直接提取所需内容,基本上是段落,表格也可以很容易地转换为HTML表格。使用样式名称并将其转换为CSS。我要求我的源文档使用样式构建,当只是格式加粗、斜体、字体大小等时,我不会尝试完全保留所有这些。我关心的是内容,而HTML格式可能会有所不同。

因此,这一切都可以通过XSLT实现,特别是旧的Word XML。

然而,对于docx,有一个非常有用的功能的一个主要损失。特别是:

  • w:listPr/wx:t/@wv:val -- 这个可以让你得到已编号章节的标题编号字符串
  • wx:sub-section -- 你可以将其转换为 <div> 元素,以获得嵌套部分而不是平面标题和段落列表。

我发现如果想正确地进行重建章节编号,这是一项非常困难的任务。Wordprocessing Numbering, Levels & Lists 中描述了原则,原则并不难理解。但是它很难实现,因为您必须追溯样式级别和 w:basedOn 父样式、具体数字格式、抽象数字格式,直到真正收集数字格式,然后您还必须跟踪所有级别的计数,以便您拥有每个级别的数字,然后再进行格式化。

我曾在 XSLT 中完成过此类继承方案,甚至觉得挺有趣,但它很难,需要花费我几天的时间,而我没有那么多的时间。

嵌套级别(wx:sub-section)的恢复也是非常棘手的,你必须打破正常的XSLT工作流程才能实现。我也做过这样的事情,但需要再投入几天时间。

我经常想知道当人们说“哦,那个wx命名空间已经被删除了,因为开发人员认为它是多余的”时,他们是否真正了解这些转换。是的,但我怀疑大多数轻描淡写地说这种话的人从未做过这些转换。

我认为docx的设计是为了让我们大多数步兵感到难以理解,以便软件公司像Microsoft和Aspex Words等拥有庞大的Windows-only依赖许可软件包的市场份额。


0
你也可以使用 pandoc - https://pandoc.org - 它可以将 docx 转换为其他格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接