java - 使用 XStream 解析器解析无效的 XML 字符 - Java

标签 java xml parsing xstream

我有一个经典的 XML 验证问题 - 我需要解析传入的 XML(来自其他应用程序 - 不使用正确的 XML 格式化程序),其中 数据中嵌入了损坏的标签和 XML 特殊字符(但未使用 CDData 标签进行换行)

我使用简单的 XStream 解析器来解码传入流,因为它是简单的序列化而不是严格的解析器。对于特殊字符,它会抛出 ConverterException 并且不会解析文件。

我想知道是否有其他解析器可用于解析无效的 XML 文件(特殊字符等) 我们无法控制作为输入流发送的内容,并且作为审核应用程序的一部分,需要从传入文件中读取尽可能多的良好记录。

是否有更好的解析选项可用,或者我是否需要编写自定义解析器来解析这些文件? 我正在使用 Spring Batch 进行批处理,并使用 XStream(1.x) 来解析 XML 文件。

AS XSD 验证失败,我想知道是否值得探索其他解析器/自定义解析器选项..

寻求您对 XML 验证的专家意见..

最佳答案

我理解您试图充分利用困惑的输入。不幸的是,由于该输入的格式似乎没有明确的规范,因此您实际上只能靠自己了。一种方法可能是首先将输入文件转换为有效的 XML,这基本上就是您通过编写自己的解析器所做的事情。在 Java 中,您可以通过使用自己的专用代码读取和解析文件并输出标准 Java XML 接口(interface)(SAX、DOM 等)来实现此目的。但是,根据您的知识,使用专门从事文本解析的不同语言可能会更快。

我的经验是,唯一真正的长期解决方案是强制数据提供者提供有效的 XML。这样做的原因是,尽管你可以尽最大努力从无效数据中提取出有效数据,但始终存在你的解释错误的风险。半有效的数据通常比没有数据更糟糕。恕我直言,最好将正确数据的责任留给供应商。

关于java - 使用 XStream 解析器解析无效的 XML 字符 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24106623/

相关文章:

java - 在格式化 JAXB 输出方面需要帮助

java - Jersey URL 加密无效

java - WebSphere 的 ibm-web-ext.xml 中 <jsp-attribute name ="reloadEnabled"value ="true"/> 和 <enable-reloading value ="true"/> 之间的差异

c# - 使用 Web Api MVC 4 反序列化嵌套的 XML

java - DocumentBuilder 解析在命中 '&amp;' 时中断字符串

PHP 解析包含

python - python 西类牙语编码有问题吗?

java - 删除Java字符串中不需要的字符

java - 小部件不遵守 ID 参数

xml - 选择与特定节点的并集匹配的所有子节点