java.io.IOException: The character ' ' is an invalid XML character
小蛙的工作常常需要做一些資料庫匯出成 XML 格式,以 XML 達到交換資料的目的,上星期匯出的時候發現 java.io.IOException: The character ‘ ‘ is an invalid XML character 這個 Exception,發生錯誤的檔案因為這個特殊字元導致 XML 匯出不完整,上網查了一些解決辦法記錄在這篇文章中。
一開始發生這個例外的時候,並沒有發現匯出的 XML 檔案是不完整的,直到最近再次處理相同資料要給同事進 Solr 的時候才發現這個問題,在 Stack Overflow 看到這篇文章,才知道其實要做到驗證字元是否合法的方法, Xerces 套件裡面早已經有了,以下方法來自該篇文章:
/* from http://stackoverflow.com/questions/93655/stripping-invalid-xml-characters-in-java */ public static String stripInvalidXmlCharacters(String input) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < input.length(); i++) { char c = input.charAt(i); if (XMLChar.isValid(c)) { sb.append(c); } } return sb.toString(); }
只要新增以上方法,透過 Xerces 中的 XMLChar.charAt(int); 方法就可以驗證該傳入的字元是否合法!
附帶一提,在 Xerces 之前的版本,只需要用到 xerces.jar 就可以了,在比較新的版本似乎要載入以下 JAR 檔:resolver.jar, serializer.jar, xercesImpl.jar, xml-apis.jar。
參考資料:
- The Apache XercesTM Project
http://xerces.apache.org/ - The character ‘’ is an invalid XML character exception getting while export data in XML file @ XML forum at JavaRanch
http://www.coderanch.com/t/477874/XML/character-invalid-XML-character-exception - Stripping Invalid XML characters in Java @ Stack Overflow
http://stackoverflow.com/questions/93655/stripping-invalid-xml-characters-in-java - 使用SAX處理XML檔案 @ JavaWorld@TW (連結已失效)
http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=492