簡體   English   中英

我們如何在 XSLT 中將 Microsoft Word DOCX 文件轉換為 HTML?

[英]How do we convert a Microsoft Word DOCX file to HTML in XSLT?

我有一個關於將 Word DOCX XML (OOXML) 文件轉換為 HTML 格式的項目。

我使用 XML Spy 和 XSLT、XPath、XML 進行此轉換。

想象一下我用 XSLT 編寫程序並轉換它的單個 Word 文件。 但是我的主管說,如果我更改文件中的值,該方法將不起作用。

我同意這一點,因為我只為該文檔指定了代碼,因為我知道其中包含的內容。

但是,我們如何在 XSLT 中編寫通用代碼來將所有 Word 文件轉換為格式良好的 HTML 文檔(因為 Word 文檔可能彼此有很大不同)?

問題是我想用 XSLT 來做嗎? 這里有什么不對嗎? 或者我只是對此太混亂了。

您使用 XSLT 將 DOCX 文件轉換為 HTML 的計划從根本上是合理的。 XSLT 非常適合此目的,因為它非常適合從 XML 映射到 XML(或 (X)HTML)。

您面臨的挑戰是基於 DOCX 的 XML 很復雜。 Ecma Office Open XML 第 1 部分 - 基礎知識和標記語言參考就超過 5K 頁。 如果您非常了解 XML、XML 名稱空間、XSLT、HTML 和 CSS,那么您“只需”學習 OOXML 的一些基礎知識即可開始。

如果您從根本上理解 OOXML,那么您不必擔心更改值。 從段落中文本運行的概念開始: w:tw:rw:p

Eric White撰寫了大量關於 OOXML 的文章,甚至專門將其轉換為 HTML。 有關優秀文章和示例,請參閱將 Open XML WordprocessingML 轉換為 XHtml

我已經使用較舊的 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 命名空間已被刪除,因為開發人員明白它是多余的”,是的,但我懷疑大多數這么輕率地說這句話的人是否做過這些轉換。

我認為 docx 被設計成遲鈍的,所以我們大多數步兵都被嚇倒了,而且像 Microsoft 和 Aspex Words 等軟件公司在龐大的 Windows 相關許可軟件包中占有市場份額。

您還可以使用 pandoc - https://pandoc.org - 它可以將 docx 轉換為其他格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM