2014-06-08 120 views
0

我有一個經典的XML驗證問題 - 我需要解析傳入的XML(來自其他應用程序 - 不使用正確的XML格式化程序),其中 有破碎的標籤和XML數據中嵌入的特殊字符(但不使用CDData標籤環繞)使用XStream解析器解析無效的XML字符-java,

我使用簡單的XStream解析器解組傳入流,因爲它是簡單的序列化而不是嚴格的解析器。對於特殊字符,它會拋出ConverterException並且不會解析文件。

我想知道是否有任何其他解析器可用於解析無效的XML文件(特殊字符等) 我們無法控制將作爲輸入流發送的內容以及作爲審計應用程序的一部分,需要儘可能多地從傳入文件中讀取好的記錄。

是否有更好的解析選項可用,或者是否需要編寫自定義解析器來解析這些文件? 我使用Spring Batch來執行批處理和XStream(1.x)來解析XML文件。

AS XSD驗證失敗,我想知道,即使它是值得探討其他的解析器/自定義解析器選項..

尋找有關XML驗證您的專家意見..

回答

2

我明白,你想充分利用混亂的輸入。不幸的是,由於似乎沒有對輸入格式的明確說明,因此您實際上是靠自己的。一種方法可能是先將輸入文件轉換爲有效的XML,這基本上是通過編寫自己的解析器來完成的。在Java中,您可以通過使用自己的專用代碼讀取和解析文件並輸出標準的Java XML接口(SAX,DOM等)來實現此目的。但是,根據您的知識,使用專門用於文本解析的其他語言可能會更快。

我的經驗是,這裏唯一的real長期的解決方案是強制數據供應商提供有效的XML。原因是,雖然您可以盡最大努力從無效數據中提取有效數據,但總會有您的解釋錯誤的風險。而半有效數據通常比沒有數據差。恕我直言,最好將正確數據的責任交給供應商。

+0

我不知道...我同意供應商應該責怪,但有幾個問題。 (1)生成無效數據的公司往往是像微軟和蘋果這樣的大公司,他們沒有提供適當的報告錯誤方法,很少修復任何問題。 (2)我們主要處理歷史數據,所以即使世界上的每個公司都修復了他們今天的所有代碼並更新了每個用戶,但仍然有人需要對所有現有文檔進行一些處理,並最終成爲我們。 :( – Trejkaz