我正在使用返回无效的“XML”的第三方库,因为它包含无效字符以及未声明的实体。我需要使用Java XML解析器来解析这个XML,但它很窒息。
是否有通用的方法来清理此XML以使其生效?
答案 0 :(得分:6)
我认为你的选择是这样的:
前两个是更重量级的,因为它们旨在解析生成错误的HTML。如果你知道这些问题是由编码和实体造成的,但是如果形成的话,我建议你自己动手:
答案 1 :(得分:3)
听起来你需要弄清楚是否有办法在转交解析器之前自己自动清理数据。某些字符如何无效,在声明的字符集中无效,或未转义的XML元字符如'<'?
对于非声明的实体,我曾经通过配置带有错误处理程序的SAX解析器来解决这个问题,该处理程序基本上忽略了这些错误。这也可能对你有帮助。请参阅ErrorHandler API。
答案 2 :(得分:1)
答案 3 :(得分:0)
对于非法字符,我建议实施过滤Reader;只需用空格转换它们(假设这些是控制字符),或者去掉它们。
未申报的实体比较棘手;一些xml解析器允许你定义要使用的替代DTD(至少Woodstox。如果是这样,你可以注入确实声明所需实体的DTD。