文档章节

org.xmlpull.v1.XmlPullParserException: Error parsing document. (position:line -1, column -1) 解决方案

ht896632
 ht896632
发布于 2016/03/02 14:07
字数 400
阅读 26
收藏 0
org.xmlpull.v1.XmlPullParserException: Error parsing document. (position:line -1, column -1) caused by: org.apache.harmony.xml.ExpatParser$ParseException: At line 5, column 10: not well-formed (invalid token)
at org.apache.harmony.xml.ExpatPullParser$ByteDocument.flush(ExpatPullParser.java:959)
at org.apache.harmony.xml.ExpatPullParser$Document.pump(ExpatPullParser.java:770)
at org.apache.harmony.xml.ExpatPullParser$Document.dequeue(ExpatPullParser.java:814)
at org.apache.harmony.xml.ExpatPullParser.next(ExpatPullParser.java:303)
at cn.kafei.service.IdentityCardService.parseCardXml(IdentityCardService.java:85)
at cn.kafei.service.IdentityCardService.getCard(IdentityCardService.java:36)
at cn.kafei.test.XmlTest.testSendXML(XmlTest.java:34)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:520)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)

造成原因分析:

一般来说,自己写的XML文件都是以UTF-8进行编码的,但是在有些网络上的XML使用的编码方式是GBK或者其他编码,而在XmlPullParser进行解析时,我尝试使用过GBK,但是还是报上面的错误,纠结了我好几个小时,最后终于找到解决方案,将GBK文件读到缓冲区,然后再以输入流的形式进行转换,最后在调用XmlPullParser的setInput方法时,将编码设置为UTF-8就可以了。

下面是完整的代码,已将这个解决办法封装为通用方法,直接调用即可。

/**
	 * 读取GBK XML文件
	 * @param inputStream
	 * @return
	 * @throws Exception
	 */
	public static ByteArrayInputStream readGBKXml(InputStream inputStream)
			throws Exception {
		// 获取返回的XML数据,因为服务器返回的是一个GBK编码的XML数据,所以这里以GBK编码来接收
		InputStreamReader reader = new InputStreamReader(inputStream, "gbk");
		BufferedReader br = new BufferedReader(reader);// 将InputStreamReader读到缓冲区中
		String temp;
		String result = "";
		while ((temp = br.readLine()) != null) {
			result = result + temp;
		}
		ByteArrayInputStream stream = new ByteArrayInputStream(
				result.getBytes());
		return stream;
	}
示例:

XmlPullParser pullParser = Xml.newPullParser();
		pullParser.setInput(readGBKXml(inputStream), "UTF-8");
//解析XML过程代码省略...


欢迎大家提出更多的解决方案,以便进行学习讨论。

转载请注明出处:


© 著作权归作者所有

共有 人打赏支持
ht896632
粉丝 36
博文 53
码字总数 31361
作品 0
闵行
高级程序员
私信 提问
chaosue/go-toml

go-toml Go library for the TOML format. This library supports TOML version v0.2.0 Features Go-toml provides the following features for using data parsed from TOML documents: Loa......

chaosue
2015/03/26
0
0
Dive into MySQL Replication

Dive into MySQL Replication Siddon's Blog2015-03-28131 阅读 mysql Dive into MySQL replication protocol Preface Let’s consider following scenario, we store huge data in MySQL an......

Siddon's Blog
2015/03/28
0
0
X-XSS-Protection设置问题

页面出现Error parsing header X-XSS-Protection: X-XSS-Protection: 1; mode=block: expected token to be 0 or 1 at character position 0. The default protections will be applied。请问......

jaav
08/21
0
0
JPA基于hibernate

我用的hibernate4.2.21,当导入hibernate-annotation.jar时产生异常:java.lang.NoClassDefFoundError: org/hibernate/util/DTDEntityResolver;删除这个jar后,出现:javax.persistence.Per......

Howk
2015/12/25
226
2
yaml文件不能被编译,main方法不能用?

Exception in thread "main" while parsing MappingNode in 'reader', line 2, column 1: roncoo: ^ Duplicate key: spring in 'reader', line 22, column 1:...

登录404
2017/02/09
45
1

没有更多内容

加载失败,请刷新页面

加载更多

Beautiful Soup

定义 Python中的一个库,主要用于从网页爬取数据; 安装 pip install beautifulsoup4 四大对象 Beautiful Soup将复杂的HTML文档转换成树形结构,树中的每个节点都是Python对象,对象可归纳为...

村雨1943
18分钟前
1
0
Visual Studio 昨日发布新版本:增加实时同步编程、共同调试

多名开发者可以在同一个项目中编程,在编写代码和调试代码时只需发送一个 URL 网址,就能邀请他人参与协作,而且无需重新配置开发环境和安装任何附加包。该服务支持 Windows、Mac 与 Linux ...

linuxCool
21分钟前
1
0
发现一种不错的学习方法

这是在《软技能,代码之外的生存之道》所看到的一种学习方法,感觉这个理念不错,分享出来,共勉。 我的「十步学习法」 多年以来,我都承受着巨大的压力:快速学习新技术、新编程语言、新框架...

firepation
21分钟前
0
0
webpack4配置详解之常用插件分享

前言   继上一次webpack的基础配置分享之后,本次将分享一些工作中项目常用的配置插件、也会包含一些自己了解过觉得不错的插件,如有分析不到位的,欢迎纠错,嗯,这些东西文档都有,大佬可...

苏南-首席填坑官
38分钟前
8
1
升压变换器 Boost

工作特点 输入输出极性相同。 开关管 MOS 和负载构成并联,在MOS 导通时,电流通过 L 滤波,电源对 L 充电。 当 MOS 断开时,L 向负载及电源放电,输出电压将是 Ui+U L ,达到升压的目的。 ...

colinux
40分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部