`
freeroy
  • 浏览: 72217 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java xml处理(dom4j,xstream,jdom,xmlbean),Content is not allowed in prolog异常解决

    博客分类:
  • Java
 
阅读更多

因由:做一个程序,过程中需要解析自定义的xml文件(utf-8)编码

 

问题:解析过程中出现Content is not allowed in prolog 异常

 

详细:

 

又是啃爹的字符集问题

 

又是可恶的xml操作

 

又是同软件版本有关

 

 

这个问题的原因大意,可以看下面文章:

 

http://weishuwei.iteye.com/blog/42872

 

 

如果解析xml的程序是dom4j,可以通过升级最新版本解决。

 

如果不是dom4j,可以尝试修改文件的编码,并去除BOM解决。

 

 

我的问题是,我不是用dom4j,尝试修改文件编码也不行。

 

 

 

 

这里只列出xstream的解决方案,其它的也可以顺推解决:

 

//构建对象,这里无啥问题,

//用什么构造函数、构造参数都可以

XStream xstream = new XStream(new DomDriver());

//下面是重点!!!

 

InputStream is = new FileInputStream(new File(configFilePath));

try {

Object object = xstream.fromXML(is);

System.out.println(object);

} finally {

is.close();

}

 

xstream.fromXML有多个重载方法,而这些方法,除inputSteam的参数版本外,其它的都不能成功通过。

 

 

原因分析:

经过查看源代码(当然,只看关键的),发现其他重载方法会使用reader对象。懂了吧,reader是读取一行的,自然地会跟BOM扯上关系!!!而我最后用的是流,HOHO~万能的流啊,解决了。

 

 

有人说,new XStream时,使用 Dom4jDriver不能解决吗?不是最新版dom4j就ok了吗?

 

明显地不是,这个跟dom4j无啥关系,关键是xstream用那种方式使用dom4j,如果是用reader,那问题依然是无解决的。

 

 

懂了吧~其它类似问题,都可以通过使用流的方式解决(推理而已)。

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics