【问题标题】:Parsing Invalid XML Characters using XStream parser - Java [duplicate]使用 XStream 解析器解析无效的 XML 字符 - Java [重复]
【发布时间】:2014-06-08 13:28:32
【问题描述】:

我有一个经典的 XML 验证问题 - 我需要解析传入的 XML(来自其他应用程序 - 不使用正确的 XML 格式化程序),其中 Data 中嵌入了 Broken Tags 和 XML 特殊字符(但不使用 CDData 标签环绕)

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

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

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

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

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

【问题讨论】:

    标签: java xml parsing xstream


    【解决方案1】:

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

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

    【讨论】:

    • 我不知道...我同意供应商应该受到责备,但有几个问题。 (1) 产生无效数据的公司通常是像微软和苹果这样的大公司,他们没有提供适当的错误报告方式,而且很少修复任何东西。 (2)我们主要处理历史数据,所以即使世界上每家公司今天都修复了他们的所有代码并且每个用户都更新了,仍然需要有人对所有现有文件做点什么,最终还是我们。 :(
    猜你喜欢
    • 2011-09-19
    • 2013-01-06
    • 1970-01-01
    • 2013-01-09
    • 2011-11-26
    • 2021-06-03
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多