当前位置:首页 > 开发 > 编程语言 > XML > 正文

DOM解析XML报错:Content is not allowed in prolog

发表于: 2014-05-06   作者:cuisuqiang   来源:转载   浏览次数:
摘要: 报错内容为: Content is not allowed in prolog. Nested exception: Content is not allowed in prolog.   网上所述总结来说就是解析内容内包含BOM。这个标记是看不到的,流里面有这个标记而已。BOM:Byte Order Mark,中文名字节顺序标记。UCS规范建议在传输字节流前,先传输BOM来判断字

报错内容为:

Content is not allowed in prolog. Nested exception: Content is not allowed in prolog.

 

网上所述总结来说就是解析内容内包含BOM。这个标记是看不到的,流里面有这个标记而已。
BOM:Byte Order Mark,中文名字节顺序标记。UCS规范建议在传输字节流前,先传输BOM来判断字节顺序。
其实UTF-8是不需要用BOM来表明字节顺序的,但是可以 用BOM来表明编码方式。BOM的UTF-8编码是EF BB BF,所以呢,如果接受者收到EF BB BF开头的字节流,就说明它是UTF-8编码了。

 

解决办法:

如果解析的是文件

可以用UltraEdit或者EmEditor打开XML,然后另存为,保存的时候有选项是以无BOM的UTF-8保存还是以有BOM的UTF-8保存。

 

如果是从远程请求回来的内容:

那么你把返回的流New为字符串,是看不到BOM的,但是你必须截取你需要的内容:

if(null != result && !"".equals(result)){
	if(result.indexOf("<") != -1 && result.lastIndexOf(">") != -1 && result.lastIndexOf(">") > result.indexOf("<"))
		result = result.substring(result.indexOf("<"), result.lastIndexOf(">") + 1);
}

 

也有说是DOM4J版本较低引起的,但是我看了一下我是用的版本是1.6.1,所以排除此类可能,但是在实际中我还是建议使用最新稳定版本来进行开发。 

 

更新
今天看日志,发现我的异常不是因为BOM头引起的,幸好我也打印了收到的内容,我一看,我去,服务器在自己处理失败以后直接返回个 error字符串,mian了一下,果然出错,这坑爹的玩儿。
public static void main(String[] args) throws DocumentException {
	String str = "error";
	Document doc = DocumentHelper.parseText(str);
	System.out.println(doc.asXML());
}
 

请您到ITEYE网站看 java小强 原创,谢谢!
http://cuisuqiang.iteye.com/ 

自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!

DOM解析XML报错:Content is not allowed in prolog

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
使用sax解析XML时,经常会遇到Content is not allowed in prolog异常,原因有两种 1、XML格式错误 2
Dom解析是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件,下
XML文档的概述 : 可扩展标记语言(eXtensibleMarkupLanguage,简称:XML: 前身是SGML(TheStandardGe
XML文档的概述 : 可扩展标记语言(eXtensibleMarkupLanguage,简称:XML: 前身是SGML(TheStandardGe
dom解析xml,会一次性读入xml文件,会把文件中的所有元素,解析成一个个Node对象节点。dom解析是基于
XML进行Dom解析: 一、XML进行Dom解析: XML:可拓展的标记语言,主要用来存储数据. Dom解析:在内存建
xml解析---DOM 工程结构图: [img] [/img] 效果图: [img] [/img] 一、stu.xml <?xml version="1.
XML进行Dom解析: 一、XML进行Dom解析: XML:可拓展的标记语言,主要用来存储数据. Dom解析:在内存建
DOM特点 1. 以树型结构访问XML文档。 2. 一棵DOM树包含全部元素节点和文本节点。 3. 可以前后遍历树
XML进行Dom解析: 一、XML进行Dom解析: XML:可拓展的标记语言,主要用来存储数据. Dom解析:在内存建
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号