原因及其解决办法:
1.xml编码错误
该xml是UTF-8编码的,如果该文件通过UltraEdit编辑后,会在无BOM头的UTF-8文件中加入BOM,但是DOM4j不认这个BOM(dom4j1.3),解决的办法可以通过升级dom4j到1.6解决
www.dom4j.org
什么是BOM?
http://www.unicode.org/faq/utf_bom.html#22Unicode
规范中有一个BOM的概念。BOM——Byte Order Mark,就是字节序标记。在这里找到一段关于BOM的说明:
在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
Windows就是使用BOM来标记文本文件的编码方式的。
2.xml文件存在非法字符
把xml 动手敲一遍,删除不该有的间隔符:比如空格,制表符(TAB)等。
异常提示是Content is not allowed in prolog.意思就是说文件开头的时候有问题。
怎么去掉BOM:
首先windows自带的记事本会在保存UTF-8编码的文件时不管是否含有BOM一律加上BOM,所以千万别用记事本。比较新版本的UltraEdit(以下简称UE,大家都是这么叫的)都对BOM支持比较好,所以推荐使用新版本的UE来解决这个问题。我用的版本是UltraEdit-32 11.00a+中文版。首先打开UE,选择菜单栏“高级”-“配置”,出现一个选项卡窗口,在“常规”选项卡中找到“保存时对所有UTF-8文件头标记(BOM)”和“对在UltraEdit里创建的新文件写入UTF-8文件头标记(如上面)”,把它们的复选框都取消不选,然后确定。这个时候UE默认情况下就不会对没有BOM的文件加入BOM,注意如果不执行上述操作UE默认也是会加的!那已经含有BOM的文件如何清除BOM呢?下面演示给大家。首先打开文件,选择菜单栏“文件”-“格式转换”-“UTF-8 转 ASCII”,这样文件会被转为ASCII编码,BOM就不会存在了,因为上面说过BOM是在UCS编码的头部的,然后再选择菜单栏“文件”-“格式转换”-“ASCII 转 UTF-8(Unicode编辑)”,这个时候文件会被转回为UTF-8编码,因为我们上面选了不自动加BOM,所以这个时候的文件是不带BOM的,然后保存文件。整个操作过程就完毕了。
报错内容为:
Content
is not
allowed
in
prolog
. Nested exception:
Content
is not
allowed
in
prolog
.
网上所述总结来说就是解析内容内包含BOM。这个标记是看不到的,流里面有这个标记而已。BOM:
Byte
Order Mark,中文名字节顺序标记。UCS规范建议在传输字节流前,先传输BOM来判断字节顺序...
<span style="font-size:12.0pt;font-family:宋体">用dom或者sax解析
xml
运行出现错误
Content
is not
allowed
in
prolog
. 原因及其
解决
办法:1.
xml
编码错误该
xml
是UTF-8编码的,如果该文件通过UltraEdit编辑后,会在无BOM头的UTF-8文件中加入BOM,但是DOM4j不认这个B
web项目在启动的时候报
Content
is not
allowed
in
prolog
错误,后经检查发现是web项目在使用dom4j/sax 读取一个
xml
文件时报错。
原因如下:
BOM(
Byte
Order Mark),是UTF编码方案里用于标识编码的标准标记,在UTF-16里本来是FF FE,变成UTF-8就成了EF BB BF。这个标记是可选的,因为UTF8字节没有顺序,所以它可
解析一个
xml
文件时引起次异常,可能是由于BOM引起的
BOM:
Byte
Order Mask,中文名字节顺序标记,UCS规范建议在输出字节流之前,先传输BOM来判断字节顺序。UTF-8其实不需要依靠BOM来表示字节顺序的,但是可以用BOM来表示编码方式。
解决
办法:
从一个正常的
xml
文件中,把头信息复制到出问题的
xml
中
<?
xml
vers
对于这个错误,不用说,就是不能被识别,文件内容解析不出来;我们做开发的都知道,往往eclipse里面很多环境配置,工具和设置繁多,最重要的是eclipse内部默认ios-8859-1这种编码,但按我们中国人的开发惯例就是首先设置为utf-8的格式!最终的项目环境又是依赖于eclipse中的非中文环境,所以最终免不了转来转去!这个问题就是你当前的properties文件,刚开始建立,是由修改.
xml
...
解析
XML
文件的时候,如 Mybatis 的 Mapper 文件,有时会出现 org.
xml
.sax.SAXParseException 前言中不允许有内容 的异常,英文就是
Content
is not
allowed
in
Prolog
。导致这个问题通常是两个原因
XML
文件开头出现了空白符或其它字符,比如 <?
xml
version="1.0" 这种开头有空格或者是 .<?
xml
ve
错误信息:
org.dom4j.DocumentException: Error on line 1 of document :
Content
is not
allowed
in
prolog
. Nested exception:
Content
is not
allowed
in
prolog
. at org.dom4j.io.SAXReader.read(SAXReader.java:4...
原因:原本是.
xml
文件格式的内容,被你用右键,文本编辑,保存,导致格式不认了。
解决
方法:下载个notepad+ 工具,用这工具打开,修改,编辑,保存,即可被继续认作
xml
格式。...
今天出现了
Content
is not
allowed
in
prolog
.错误,本以为是tomcat的lib错误。重新下了个新的tomcat,依旧如此。后来才发现是
XML
文件写的格式错误。
Exception sending context initialized event to listener instance of class org.springframework.web.conte