DOM解析XML报错Content is not allowed in prolog解决方案详解

网友投稿 595 2022-11-17


DOM解析XML报错Content is not allowed in prolog解决方案详解

报错内容为:

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.tgLtLMhlastIndexOf(">") > result.indexOf("<"))

result = resultgLtLMht.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());

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:新手入门学习Spring Freemarker教程解析
下一篇:SpringBoot+mybatis实现多数据源支持操作
相关文章

 发表评论

暂时没有评论,来抢沙发吧~