2017-03-18 21 views
0

我正在編寫一個Java程序,用於將XML文件解析/解組爲Java對象。有什麼方便的方法來檢查xml文件是否包含無效字符

該程序需要XML文件,這是由第三方生成的,我沒有任何控制權。

一旦獲得文件,這些文件的程序檢查是否使用他們各自的XSD↓

URL schemaFile = this.getClass().getClassLoader().getResource(xsd/some.xsd); 
Source xmlFile = new StreamSource(new File(/path/to/xml)); 
SchemaFactory schemaFactory = SchemaFactory.newInstance(W3C_XML_SCHEMA_NS_URI); 
Schema schema = schemaFactory.newSchema(schemaFile); 
Validator validator = schema.newValidator(); 
validator.validate(xmlFile); 

然後開始分析/解編其個人使用JAXP格式無效。

我面對的問題是,即使在上面的驗證後,有時我會得到以下錯誤。 (以上驗證似乎並不檢查XML是否包含無效字符,但只有它的XSD比較輸入)

javax.xml.stream.XMLStreamException: ParseError at [row,col]:[xxx,xxx] 

有檢查使用程序或某些工具XML文件是否包含無效字符的任意方便的方法?

我已經使用「sed -n'240,250p'」提取了出現異常的部分(第245行)。 sample.xml

+0

你能想象一種不涉及檢查每個角色的方法嗎?爲什麼不能在發生異常時處理異常? –

+0

我不確定這是我應該如何處理無效字符。爲了某些目的,我將XML數據導入數據庫。 (XML - > Java對象 - >數據庫表)。你不覺得那些無效字符會導致意想不到的副作用嗎? –

+0

他們將導致解析異常。在整個輸入處理完成之前不要提交。它應該是全部或沒有。 –

回答

0

您是否有允許的字符的白名單?這裏有一種模式:

  1. 對於每個流式字符,如果它沒有列入白名單,則將其替換爲無。
  2. 向過濾後的文件內容是否和以前一樣(DIFF模式)

如果兩個文件的內容不相等,則在源文件中包含無效字符。

相關問題