文档章节

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
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
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
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

没有更多内容

加载失败,请刷新页面

加载更多

学hadoop需要什么基础

最近一段时间一直在接触关于hadoop方面的内容,从刚接触时的一片空白,到现在也能够说清楚一些问题。这中间到底经历过什么只怕也就是只有经过的人才会体会到吧。前几天看到有个人问“学hadoo...

左手的倒影
9分钟前
1
0
LOADING Redis is loading the dataset in memory

Redis出现错误 LOADING Redis is loading the dataset in memory 原因是: redis中dump.rdb文件到达3G时,所有redis的操作都会抛出此异常。 解决方法: redis.conf中 maxmemory 调大。 另外一...

swingcoder
9分钟前
0
0
闪屏页设置

相信每个app都需要一个闪屏页 就是一个开始页面 对于新手来说 可能就直接一个activity 弄个背景图片 ,细心地同学也许会发现 每次启动 应用程序的时候 一开始显示的不是那个设置的背景图片 ...

王先森oO
14分钟前
1
0
解析Excel

import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import or......

开源中国封号找我
19分钟前
0
0
pandas不能在pycharm中使用plot()方法显示图像的解决方法

最近用了pycharm,感觉还不错,就是pandas中Series、DataFrame的plot()方法不显示图片就给我结束了,但是我在ipython里就能画图 以前的代码是这样的 import matplotlib.pyplot as pltfrom p...

kipeng300
22分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部