Java自带SAXParser解析XML1.1时出现字符错误的问题咨询
问题解答
关于XML 1.1中{、}、[、]的转义要求
XML 1.1和XML 1.0的规则一致,{、}、[、]这类字符不需要转义。XML仅要求对&、<、>、"、'这五个特殊字符进行转义(在元素内容或属性值中),其余可打印ASCII字符(包括大中小括号、方括号)直接使用即可,不会破坏XML的合法性。
Java自带SAXParser的字符异常问题
这是Java内置SAXParser(底层基于Xerces的特定版本)的已知问题,主要出现在处理大体积XML 1.1文件时,尤其是当文件中存在长注释、大文本块(如你提到的超40KB JSON对象)时,内置解析器的缓冲区处理逻辑可能出现异常,导致characters()方法返回重复、截断或额外字符。
验证与规避方案
- 切换到独立的Apache Xerces解析器后问题消失,是因为独立版本的Xerces修复了XML 1.1处理中的这类缓冲区bug,且版本更新更及时;
- 切换到XML 1.0后问题消失,是因为XML 1.0的处理逻辑在内置解析器中更成熟,没有触发XML 1.1特有的处理漏洞;
- 若必须使用XML 1.1,可尝试升级JDK到较新版本(如OpenJDK 11及以上),部分新版本已更新内置Xerces库修复该类问题;若升级无效,建议直接引入独立的Apache Xerces依赖替代内置解析器。
内容的提问来源于stack exchange,提问作者Andreas Mueller
相关产品推荐
相关产品推荐

