簡體   English   中英

有沒有辦法在解組到 Java object 時替換無效的 XML 數據?

[英]Is there a way to replace invalid XML data while unmarshaling into Java object?

我正在使用 JAXB unmarshal組方法將 XML 數據轉換為 java 對象。 代碼有效,但當 XML 標記之一中存在無效數據時,該方法會引發異常並立即停止,例如

org.springframework.oxm.UnmarshallingFailureException: JAXB unmarshalling exception; nested exception is javax.xml.bind.UnmarshalException
 - with linked exception:
[com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence.]

org.springframework.oxm.UnmarshallingFailureException: JAXB unmarshalling exception; nested exception is javax.xml.bind.UnmarshalException
 - with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 45; An invalid XML character (Unicode: 0x1) was found in the element content of the document.]

我想要的不是立即拋出異常,而是通過將無效數據替換為空格或空字符串(即剝離它們並繼續)來盡可能多地轉換 XML 數據。

有沒有辦法讓解組器做到這一點?

或者,如果有辦法讓解組器從它停止的地方繼續,那么嘗試捕獲異常是可以的(不太理想)。

顯然,預處理 XML 以在解組之前首先去除所有無效數據是另一種方式,除非沒有其他方式,否則不可取,因為它只是意味着處理 XML 數據兩次。

如果 JAXB 不能做我想做的,歡迎使用其他解組器。

首先,您要問的是格式不正確的XML 而不是無效的 XML 。 格式不正確的 XML 違反了 XML 的規則(技術上不是 XML)。 無效的 XML 僅違反了 XML 模式給出的規則。 有關詳細信息,請參閱格式良好與有效 XML

鑒於此背景,很容易看出問題所在:格式不正確的 XML 甚至無法解析,因此所有兼容的 XML 工具都將無效。 (請記住,這些數據甚至不是真正的 XML。)您應該從源頭解決問題:修復生成“錯誤 XML”的代碼。

如果無法修復錯誤代碼,請參閱如何解析無效(錯誤/格式不正確)XML?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM