![](/img/trans.png)
[英]How do we convert the Nested Lists in Microsoft Word DOCX file to HTML with XSLT?
[英]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:t
、 w:r
和w: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 命名空間。 尤其:
<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.