2011-02-15 61 views
0

我做Java中的XML驗證,使用SAX「在文本內容中發現無效字符」,我想認識以下類型的錯誤: 「一個無效的字符在文本內容中發現」。如何檢測

目前,我有一個驗證用SAX和一些文件我已經敗壞沒有檢測到錯誤的字符。當我嘗試用IE瀏覽器打開結果XML文件時,例如,我收到一條錯誤消息「在文本內容中發現無效字符」。

這是XML數據的例子:

<?xml version='1.0' encoding='UTF-8' standalone='yes'> 
<!DOCTYPE blabla SYSTEM 'blabla.dtd'> 
<blabla type='type' num='num'> 
<...>... corrupted character </...> 
</blabla> 

這是解析器的instanciation的例子:

SAXParserFactory factory = SAXParserFactory.newInstance(); 
factory.setValidating(true); 
factory.setNamespaceAware(true); 

parser = factory.newSAXParser(); 
parser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); 
parser.setProperty(JAXP_SCHEMA_SOURCE, new File(theConfig.getRoot() 
     .concat(File.separator).concat(theConfig.getXsdFileName()) 
     .concat("-v").concat(theConfig.getXsdFileVersion()).concat(
         XSD_EXTENSION))); 
reader = parser.getXMLReader(); 
reader.setErrorHandler(getHandler()); 
reader.setEntityResolver(new MyEntityResolver(theConfig.getRoot(), 
       theConfig)); 
InputSource is = new InputSource(); 
is.setCharacterStream(new StringReader(theDataToParse)); 
reader.parse(is); 

錯誤處理程序實現方法「警告」,「錯誤」和'fatalError',但沒有檢測到。 實體解析器能夠引導存儲在配置目錄中的custome實體文件。

是否有人有,爲什麼沒有檢測到這種畸形的字符錯誤的想法?是因爲我的流來自String而不是文件?

在此先感謝您的幫助。

問候。

回答

-1

是的,顯然你已經因爲你已經持有該字符串做了字節字符轉換。如果你想檢測無效字符,你需要解析字節。一般來說,將xml數據保存爲字符串數據並不好,因爲您可能會通過不正確的字符編碼來破壞它。處理xml的最好方式是作爲二進制數據。

+0

好吧,其實就像你說的,我的第一個字節轉換爲字符,因爲數據來自於EBCDIC格式大型機的基礎設施,以及我第一次轉換之前申請修改鏈接到我的XML結構(格式化)。我會檢查我是否可以用另一種方式做到這一點,以便我有字節而不是字符。謝謝你的回答 – kij 2011-02-15 14:42:48