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

时间:2017-03-21 13:37:04

标签: xml xslt xpath openxml docx

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

我使用XML Spy和XSLT,XPath,XML进行这种转换。

想象一下我在XSLT中编写程序并对其进行转换的单个Word文件。但是我的主管说,如果我在文件中更改一个值,那么该方法将无效。

我同意这一点,因为我只为该文档指定了代码,因为我知道其中包含的内容。

但是,我们如何在XSLT中编写一般代码,将所有Word文件转换为格式良好的HTML文档(因为word文档可能会有很多不同之处)?

问题是我正在尝试使用XSLT吗?这里有什么不对吗?或者我对此非常混乱。

3 个答案:

答案 0 :(得分:3)

您计划使用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:p

Eric White已经在OOXML上撰写了大量文章,甚至专门将其转换为HTML。有关优秀文章和示例,请参阅Transforming Open XML WordprocessingML to XHtml

答案 1 :(得分:0)

我已经使用较旧的 Word XML 输出完成了此操作。我做了一些比较旧的 Word XML 和新的 docx 格式的研究。他们非常非常相似。 docx 是多文件存档这一事实对我来说不是问题,因为我使用在 java 中运行的 Saxon XSLT,我可以使用 jar 文件 URL 打开 word/document.xml 文件,然后从那里访问所有其他文件使用 document() XPath 函数。

我发现诀窍是切入正题,通过提取您需要的内容,本质上是段落,表格也可以非常直接地转换为 HTML 表格。使用样式名称并将它们转换为 CSS。我要求我的源文档是用样式构建的,当它只是格式化粗体、斜体、字体大小之类的东西时,我不会尝试完全保留所有这些。我关心内容,HTML 格式可能会大不相同。

所以,这对于 XSLT 来说是完全可行的,尤其是旧的 Word XML。

然而,使用 docx 有一个非常有用的功能的重大损失:wx 命名空间。特别是:

  • w:listPr/wx:t/@wv:val -- 它为您提供编号部分的部分标题编号字符串
  • wx:sub-section -- 您可以将其转换为 <div> 元素以具有嵌套的部分而不是标题和段落的平面列表。

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

我已经在 XSLT 中完成了这种继承方案,它甚至很有趣,但它很难并且需要我几天时间,而我没有时间。

嵌套级别(wx:sub-section)的恢复也很重要,您必须打破正常的 XSLT 工作流程才能实现这一点。我也做过这样的事,不过还得再投资几天。

我经常想知道什么时候人们说“哦,wx 命名空间已被删除,因为开发人员明白它是多余的”,是的,但我怀疑大多数这么轻率地说这句话的人是否做过这些转换。< /p>

我认为 docx 被设计成钝器,所以我们大多数步兵都被吓倒了,而且像 Microsoft 和 Aspex Words 等软件公司在庞大的 Windows 相关许可软件包中占有市场份额。

答案 2 :(得分:0)

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