xml解析、寫入遇到的坑
阿新 • • 發佈:2018-11-21
前言
最近在看一個線上xml檔案匯出的問題,需求如下:
從我們平臺匯出一個字尾為tmx的術語語料資料(實際內容為xml檔案),然後匯入到其他第三方平臺發現無法匯入。
從其他平臺匯入的tmx檔案無法匯入到我們平臺。
因為第三方平臺並沒有提示哪裡出錯,所以這裡還是用了一點時間來定位問題,主要問題有以下兩點:
- 讀取和寫入的時候沒有注意到使用者輸入或匯出的xml中包含特殊字元
- 匯出為xml時沒有將一些非法字元過濾掉
問題一: 過濾特殊標籤
- <
- >
- &
- '
- "
這些特殊標籤在xml中都需要轉義才能夠使用,對應的轉義列表如下:
問題二:過濾非法標籤
這個是在匯入時報了一個錯:An invalid XML character (Unicode: 0x**) was found in the comment.
最後查詢才知道這個是解析的xml中有特殊字元,或者稱為亂碼。(xml格式為UTF-8 BOM)
一般是因為xml中有些不可見的特殊字元,官方定義了XML中的無效字元分為三段:
0x00 - 0x08
0x0b - 0x0c
0x0e - 0x1f
所以解決方法是 解析或者寫入前將字串的非法字元過濾掉,方法如下:
string.replaceAll("[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]", "")