java - 有没有办法在解码到 Java 对象时替换无效的 XML 数据?

标签 java xml jaxb unmarshalling

我正在使用 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 数据。

有没有办法让解码器做到这一点?

或者,如果有办法让解码器从停止的地方继续, try catch 异常就可以了(不太理想)。

显然,在解码之前先对 XML 进行预处理以去除所有无效数据是另一种方法,除非没有其他方法,否则并不可取,因为它只意味着处理 XML 数据两次。

如果 JAXB 无法执行我想要的操作,欢迎使用其他解码器。

最佳答案

首先,您询问的是格式不正确的 XML,而不是无效的 XML。格式不正确的 XML 违反了 XML 的规则(从技术上讲,它不是 XML)。无效的 XML 只是违反了 XML 模式给出的规则。请参阅Well-formed vs Valid XML 了解更多详情。

考虑到这一背景,很容易看出问题:格式不正确的 XML 甚至无法解析,因此所有兼容的 XML 工具都将无效。 (请记住,此类数据甚至不是真正的 XML。)您应该做的是从源头上解决问题:修复生成“错误 XML”的代码。

如果无法修复错误代码,请参阅 How to parse invalid (bad / not well-formed) XML?

关于java - 有没有办法在解码到 Java 对象时替换无效的 XML 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61334435/

相关文章:

c++ - codesynthesis 不解析我的 xml 文件

java - Play framework 2.5.x Web Socket Java

java - 如何使用XSL动态设置属性值

java - Java 的 instanceof 和 isInstance() 在 VB 中的等价物是什么?

Java JAXB - 如何使用生成的 bean

JAXB 编译问题 - [错误] 属性 "Any"已定义

java - JAXB 内部元素被忽略

java - XMLRootElement 在 Jersey 中将类转换为 XML

java - Google Cloud 语音 API 中转录的文件大小

java - 转义序列不正确