DOM解析XML报错Contentisnotallowedinprolog解决⽅案
详解
报错内容为:
Content is not allowed in prolog. Nested exception: Content is not allowed in prolog
使用dom4j解析xml文件
⽹上所述总结来说就是解析内容内包含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());
}
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。