[Office] 修復 Xml parsing error 的 Word Docx 檔案

[Office] 修復 Xml parsing error 的 Word Docx 檔案

今天家人想要用 Word 開啟一個 .docx 的檔案時,

出現了如下的錯誤訊息,說 Xml parsing error:

 

如果用 Windows 版的中文 Office 開啟,

訊息會是類似「元素結束標記中的名稱必須和開始標記中的元素型別相符」…

不過意思差不多,就是 XML 的結構有問題,該成對的標記沒有成對…

 

網路上有一些號稱可以修復 Office 文件的工具,不過似乎大部分都要錢…

既然知道是 XML 結構的問題,

來試著手動修正錯誤看看吧~

 

1. 解壓縮 docx  檔案

.docx 事實上是個 zip 檔案,

把它更名成 .zip 後應該就能解壓縮~

 

或是在 Mac/Linux 上直接用 unzip 指令解開,

像下面的指令會將 wrong.docx 的內容解壓縮到 src 這個目錄下:

unzip wrong.docx -d src

 

2. 修正 document.xml 中的錯誤配對

找一個 XML 編輯器,從解壓縮的檔案裡面,

打開 word/document.xml 吧,

如果是有驗證 XML 結構的編輯器更好~

 

像我是用 Oxygen XML Editor,

用驗證 (Validate) 功能可以找到 XML 中的錯誤。

只要看 Oxygen XML Editor 列出來的 Fatal errors 就好,

因為這些是真正造成結構不對稱的元兇~

舉例來說,下面的訊息就是說 <mc:Fallback> 這個標記沒有對應的 </mc:Fallback> 標記:

 

如果沒有 XML 專用的編輯器,其實也可以用一般的文書編輯器 (如 Sublime Text),

再利用瀏覽器 (像 Chrome) 來開啟 XML 檔,

XML 結構如果有嚴重的問題,一樣看的到:

 

驗證 XML 結構是否正確很簡單,

但要修正錯誤,就頗為困難…

像是我點一下 Oxygen XML Editor 指出來的錯誤,

它會將錯誤的區塊選取起來,如下所示:

 

但這樣只知道這個選取區域結尾的 </w:p> 有問題,

Oxygen XML Editor 認為這裡應該要有個 </mc:Fallback> 才對。

但是,並不是直接把 </w:p> 改成 </mc:Fallback> 就成對了…

 

觀察一下左邊的 Outline 視窗,

注意到這個 mc:Fallback 的區塊是在 mc:AlternateContent 區塊裡面,

裡面包含了 mc:Choice 和 mc:Fallback 兩個區塊:

 

這個 Outline 的結構示意並不一定正確,

只是照著目前 XML 的內容來顯示,但可以給我們一些提示…

分別點擊一下這三個區塊,看一下被選取的區塊的上下內容,

可以發現結構大概是像這樣:

<w:p>
    <w:pPr>
        <w:pStyle />
        <w:ind />
    </w:pPr>
    <w:r>
        <w:rPr>
            <w:noProof />
        </w:rPr>
        <w:lastRenderedPageBreak />

        <mc:AlternateContent>
            <mc:Choice>
                ......
                ......
            </mc:Choice>

            <mc:Fallback>
            ......

</w:p>    

 

以這個結構來看,感覺是:

  • 缺少對應的 </mc:Fallback>
  • 缺少對應的 </mc:AlternateContent>
  • 缺少對應的 </w:r>

 

以這例子來說,就是在 <mc:Fallback> 區塊結束的地方,

補上 </mc:Fallback></mc:AlternateContent></w:r> 就可以了~

 

補上之後,再重做 XML 驗證,

如果還有錯誤,就持續修正~

我大概修正同樣的問題 4 次後,手上這個 document.xml 才沒有錯誤了~

 

有人可能會問,這個最後的 </w:p>,

怎麼知道是對到最前面那個 <w:p>,而不是其他的 <w:p> 呢?

一旦對錯位置,修正的東西可能是完全不對的…

這個問題我也是一直反覆觀察有問題區塊的上下文,

才推敲出可能的結構的,

每個人遇到的文件損毀狀況可能不同,得自己觀察看看…

 

3. 產生修正後的 docx 檔案

document.xml 在修正完後記得存檔,

接著將原本從 docx 檔解壓縮出來的東西,全部再壓縮回 zip 檔案,

更改副檔名成 .docx 就行了~

 

像我前面用 unzip 解開,就也用 zip 壓回 docx:

cd src
zip -r ../fix.docx .

 

最後再用 Word 開啟重新壓好的 docx 檔案,

如果能成功開啟沒有錯誤的話,就成功啦~

 

這次的修正經驗蠻有趣的,雖然過程有點辛苦,

不過因為錯誤的類型都一樣,所以後來的錯誤修正很快,

小小經驗分享給大家囉~^^

 

參考資料:

[word] 無法開啟檔案 因為發現其內容有問題

9 ways to recover a corrupt Microsoft Office file

(本頁面已被瀏覽過 8,466 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料