最近在作簡單的解析XML的工做,我使用的是DOM4J來解析,能夠說很方便了,在加上使用XPATH來具體肯定XML中特定元素下的位置,更加便捷了java
但是在使用XML解析是卻遇到了這樣的問題:spa
org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x10) was found in the CDATA section. code
解析XML文件時出現非法字符 (Unicode: 0x10) 的Exception(即便該字符位於CDATA段內)xml
查閱資料得知,這個問題能夠歸納爲An invalid XML character (Unicode: 0x**) was found in the comment. blog
問題所在是由於文件中有XML不容許的特殊字符,我以爲這也是咱們俗稱的亂碼,W3C標準中有規定,有一些字符不能出如今XML文件中:io
這些錯誤的發生是因爲一些不可見的特殊字符的存在,而這些字符對於XMl文件來講又是非法的,因此XML解析器在解析時會發生異常,官方定義了XML的無效字符分爲三段: 0x00 - 0x08 0x0b - 0x0c 0x0e - 0x1f
最後這個問題的解決方法是:class
1 對有可能出問題的XML文件,進行字符過濾後再進行解析。 2 public static String XMLChars(String s) { 3 if (s == null || "".equals(s)) { 4 return s; 5 } 6 return s.replaceAll("[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]", ""); 7 }
這樣這個問題就解決了亂碼