xml解析、寫入遇到的坑


前言

最近在看一個線上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]", "")

今天將自己踩到的坑記錄一下,以往對園友有所幫助。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM