我的 xml 文件是這樣的:<Customers> <Customer> <name>foo</name> <age>18</age> <sexe>Male</sexe> <Customer> <Customer> <name>foo1</name> <age>25</age> <sexe>Female</sexe> <Customer> . . . . . .</Customers>這是一個巨大的 XML 文件(超過十萬個客戶),我需要將其解組然后放入我的數(shù)據(jù)庫中,這是每月的任務(wù)。我需要對其進行一些驗證,然后如果客戶正確將其保存到數(shù)據(jù)庫中,如果客戶的任何數(shù)據(jù)不正確,則記錄錯誤并跳過該客戶。我正在考慮將我的驗證規(guī)則寫入 xsd,然后在使用ValidationEventHandler解組期間忽略整個客戶。任何人都知道我該怎么做?還是有其他解決辦法?我已經(jīng)在網(wǎng)上搜索了幾個小時,但沒有找到任何答案。
1 回答

函數(shù)式編程
TA貢獻1807條經(jīng)驗 獲得超9個贊
變體 1 - XML 方法
常見的 XML 處理方法是將驗證和解析分開。驗證步驟通常以 XML Schema 為目的。
XML 驗證始終應(yīng)用于文檔級別。也許之前拆分文檔(例如,每條記錄一個 DOM)對您的情況有所幫助。請參閱:如何使用 java 將 XML 文件拆分為多個 XML 文件
驗證 - 您可以使用trang 之類的工具來創(chuàng)建基本的 XSD
從源文檔中整理出有問題的條目(手動任務(wù) - 責怪數(shù)據(jù)提供者?)
只反序列化好的
變體 2 - 純 Java
也可以使用像Jackson FasterXML這樣的庫來創(chuàng)建 XML 數(shù)據(jù)到 Java 類的相當松散的映射。在此處查找有關(guān)如何僅讀取列表中每個條目的某些屬性的示例。
將所有數(shù)據(jù)松散地反序列化為標準 POJO
在附加的 java 后處理步驟中驗證每個 POJO。
變體 3 - 有所不同
查找每個客戶的字節(jié)偏移量并將每個客戶讀取到準備好的 POJO。記錄異常并繼續(xù)下一個。查找此處描述的完整方法。
創(chuàng)建字節(jié)偏移列表
對你的 POJO 進行嚴格的反序列化
添加回答
舉報
0/150
提交
取消