解析 XML 文件的时候,如 Mybatis 的 Mapper 文件,有时会出现 org.xml.sax.SAXParseException 前言中不允许有内容
的异常,英文就是 Content is not allowed in Prolog
。导致这个问题通常是两个原因
- XML 文件开头出现了空白符或其它字符,比如
<?xml version="1.0"
这种开头有空格或者是.<?xml version="1.0"
这种出现多余符号的。 - 文件编码为 UTF-8 with BOM,即带 BOM 头的 UTF-8 格式,很多时候都是这个原因。
如果是文件编码的问题,使用普通的 IDE 转一下格式就行,转成无 BOM 的。
关于 BOM
字节顺序标记(英语:byte-order mark,BOM)是位于码点U+FEFF的统一码字符的名称
不建议使用带 BOM 的 UTF-8 格式
UTF-8编码过的字节顺序标记则被用来标示它是UTF-8的文件。它只用来标示一个UTF-8的文件,而不用来说明字节顺序。许多视窗程序(包含记事本)会添加字节顺序标记到UTF-8文件。然而,在类Unix系统(大量使用文本文件,用于文件格式,用于进程间通信)中,这种作法则不被建议采用。因为它会妨碍到如解译器脚本开头的Shebang等的一些重要的码的正确处理。它亦会影响到无法识别它的编程语言。如gcc会报告源码档开头有无法识别的字符。而在PHP中,如果没有激活输出缓冲(output buffering),它会使得页面内容开始被送往浏览器(即:用户头文件已被提交),这使PHP脚本无法指定用户头文件(HTTP Header)。字节顺序标记在UTF-8中被表示为序列EF BB BF,对大部分未准备好处理UTF-8的文本编辑器及网页浏览器而言,在ISO-8859-1的环境中则会显示。