2012年6月28日

發現子文件 content.xml 內檔案的格式錯誤

星期三因為這個錯誤,讓我一整天都覺得不對勁。

一直以來都有一個習慣,每天都會透過一個記錄檔來管理各項工作內容,所有的工作進度、聯繫事項等等,都記錄在該檔案中,因為已經養成習慣,所以很依賴這個記錄檔來進行工作管理。然而,星期三一進辦公室,在開啟這個檔案時,竟然出現這個錯誤:發現子文件 content.xml 內檔案的格式錯誤!!



九點多時出現這個錯誤,發現檔案似乎損毀了。心想不妙,今年所有的工作記錄都在上面,以及這幾天的工作計畫也在其中,這下子不知道該如何是好。想要趕緊把檔案修復,可是電話與事情一直來,不得不先處理,且中午又要到外面參加研討會,等於是下午沒有時間可以處理。
沒想到少了這麼一個檔案,會讓我覺得渾身不對勁,好像失去一個重要的工具,忽然忘記怎麼工作了。編處理手邊的事情,邊想著該怎麼處理。

這個檔案是使用OpenOffice.org (OOo)軟體編輯的。OOo是一套功能類似MS Office的應用軟體,內容包含如同 Word、Excel、Powerpoint、Access,也有繪圖與數學符號編輯器等等,更重要的是,他完全是 Free 的,也就是只要有OOo,就可以完成大部分MS Office的功能,而且OOo所編輯的檔案,可以另存成Office的格式,給Office開啟,OOo也可以開啟Office的檔案。當然,在使用介面上以及美觀上是不能跟MS Offcie比,畢竟一個是收費的,一個完全是免費的。

或許以前就潛在的有反微軟的意識,且覺得Office一套這麼貴,也沒用到多少功能,又不想使用盜版的軟體,所以七、八年前就開始使用OOo。公司的文件中,有很多的文件都是使用OOo來編輯製作。而這個記錄檔是OOo的Calc軟體編輯的,也就是類似MS Office中的Excel。

而OOo的檔案有一個特性,就是雖然表面上他是一個 ods 或是 odt 等類別的檔,事實上他是一個很多檔案壓縮起來的檔案,所以可以直接把一個附檔名 ods 的檔案,將附檔名改為 rar ,就可以使用解壓縮軟體看到其中真正的檔案與資料夾。

看到錯誤訊息,就可以知道是壓縮檔中的 content.xml 檔案有問題,所以透過 google 找了一下是否有解決方法。可惜使用OOo的人不多,所以相關資訊也不多,大部分是教育單位裡使用OOo的訊息。從股溝到的訊息判斷,可能是content.xml檔案中,有奇怪的字元造成的原因。因此就把content.xml檔案取出來,用文字編輯器打開看看。

挖勒,密密麻麻的xml語言所寫的內容,沒有分段沒有註解,想看的懂且抓到問題,實在是一件不可能的任務。雖然文件中只有兩行,第一行短短的,但是第二行確有六十幾萬的字元串起來,一大堆tag標籤組成的內容,光是看就頭暈了,怎麼能夠抓到問題。而且從錯誤訊息來看,錯誤位置是在第二行的第 363878 個字元處,而透過 ultraedit打開該文件,字元計算只能到65536,所以又花了一些時間才定位到 363878個字元。不過,雖然定位到該字元,但是只是一個一般的 tag,還是無法找出問題。

想到google提到可能是特別字元造成的,所以把最後1萬個字元中所有的中文字都清掉,再把檔案回存到壓縮檔中,試著打開看看。還是打不開。一直反覆清除字元,或是把最後一些tag刪除。都沒有效果。

一轉眼已經是11點多了,不能在這麼笨的蠻幹,該找些工具來試試看。於是 google 一下xml編輯工具,陸續下載了 Bytescout XLS Viewer、XML Viewer、WmHelp XmlPad 來試試看,很可惜,這些工具只要一打開這個有問題的文件,就會掛掉或是顯示無法開啟。看起來這幾個軟體都只是顯示正常的xml檔,當遇到語法有問題的檔,就會無法開啟。

沒一下子就中午了,趕緊把飯扒一扒,趕去參加研討會。

還好研討會在五點就結束,雖然沒有能夠抽到 new ipad,不過可以回公司繼續處理問題也不錯。回來後又再找了一套專門編寫xml的軟體 xml Maker 2,終於找到一套可以正常開啟這個有錯誤的xml檔的軟體了。解決問題終於進了一步,接下來就是要看懂裡面千千萬萬個 tag,而這套軟體很不錯的把其中疑似錯誤的地方標出來,一共有五個警告與一個錯誤。平時沒有在研究xml語言,看這些錯誤其實有點辛苦,只能依賴15年前學校教的 html 語言基礎來碰碰運氣。找到了一個 table tag 疑似有問題,把他拿掉,其中3個警告就消失,只剩下最後一個錯誤。這個錯誤的tag,看不出來有那裡奇怪,索性就把去年的檔案也打開,從錯誤處一個一個比對,發現有問題的xml檔案,最後多了一組</office:spreadsheet></office:body></office:document-content>的標籤,拿掉後該錯誤也消失,看起來是有機會解決了。將修正完的 content.xml 檔案壓回原本的rar中,再把附檔名改回 ods,開啟檔案,BINGO ......

問題解決了!

所以如果您有遇到OOo的檔案出現相同的錯誤,除了檢查是否有奇怪的難字在 content.xml中,也可以透過  xml Maker 2 這套軟體來協助 debug。不過這套軟體好像要收費,可以免費試用30天!

1 則留言:

  1. 你好~請問可以麻煩你幫我處理我的檔案嗎?我也有一樣的問題,但有點看不懂,可以請你幫我一下嗎?

    回覆刪除