zoukankan      html  css  js  c++  java
  • 利用Pull解析xml时,总抛出这个异常:Error parsing document的解决方案

    前两天在写一个新闻资讯客户端时,利用Pull从web服务器返回的xml数据时,报了下面的错误消息,直到现在才找到错误的原因。就因为这个小错误我写了很多种单元测试的方法,从web返回的xml数据是正确的,能在浏览器上进行查看,可一到Pull解析时,就报了如下的错误消息:

    org.xmlpull.v1.XmlPullParserException: Error parsing document. (position:line -1, column -1) caused by: org.apache.harmony.xml.ExpatParser$ParseException: At line 3, column 0: XML or text declaration not at start of entity

    at org.apache.harmony.xml.ExpatPullParser$ByteDocument.flush(ExpatPullParser.java:958)
    at org.apache.harmony.xml.ExpatPullParser$Document.pump(ExpatPullParser.java:769)
    at org.apache.harmony.xml.ExpatPullParser$Document.dequeue(ExpatPullParser.java:813)
    at org.apache.harmony.xml.ExpatPullParser.next(ExpatPullParser.java:302)
    at test.NewsTest.testNetConn(NewsTest.java:65)
    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:529)

    at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)

    这样的异常消息,以前不是没有见过,以前出现这个异常和解决方法详见下面的代码:

    <!--这是 xml文件中的start document 语法   注意这个注释是不能放在 开头的也就是start document 的前面-->
    <?xml version="1.0" encoding="utf-8" ?>
    <persons>
        <person id="1">
            <name>张三</name>
            <age>19</age>
        </person> 
        <person id="2">
            <name>李四</name>
             <age>20</age>
        </person>
        <person id="3">
            <name>wangwu</name>
            <age>22</age>
        </person> 
    </persons>
    <!--这是xml 文件中结束部分的end document 语法-->


    解决方法就是将上面注释的内容放到start document的后面,然后用Pull解析时,没有抛出异常。今天无意间看到以前的这个异常消息的解决方法,就联想到前天遇到的同样的异常消息,是不是也是因为从web服务器返回的xml数据的开发部分,包含了其他的信息,于是我进行了测试。

    首先,下面是从web服务器返回xml数据的jsp界面的代码:

    <%@ page language="java" import="java.util.*,entity.*" pageEncoding="UTF-8" contentType="text/xml; charset=UTF-8"%>
    <%
    List<News> list =(List<News>)request.getAttribute("news");
    %>

    <?xml version="1.0" encoding="utf-8"?>
    <newslist>
    <% for(News news : list){%>
    <news id="<%=news.getNid()%>">
    <title><%=news.getNtitle()%></title>
    <author><%=news.getNauthor()%></author>
    </news>
    <%}%>
    </newslist>

    我们看上面的代码,从逻辑上理解是没有不对的地方,可就是这样的jsp界面服务器响应回来的xml数据,利用Pull解析时,就抛出上面的异常。

    现在,来看一下,从浏览器里查看源码时的数据:

                                                              
    
    <?xml version="1.0" encoding="utf-8"?>
    <newslist>
    	
    	<news id="1">
    		<title>H7N9禽流感</title>
    
    

    仔细看就会发现,多了两个行回车,产生的原因就是上面jsp界面黄色背景的代码部分,好,优化上面的jsp界面的代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <newslist>
    <%
    List<News> list =(List<News>)request.getAttribute("news");
    %>
    <% for(News news : list){%>	
    	<news id="<%=news.getNid()%>">
    		<title><%=news.getNtitle()%></title>
    		<author><%=news.getNauthor()%></author>
    	</news>
    <%	}%>
    </newslist>
    <%@ page language="java" import="java.util.*,entity.*" pageEncoding="UTF-8" contentType="text/xml; charset=UTF-8"%>

    经过这样的优化后,利用Pull解析从web服务器返回的xml数据时,再也不抛出上面的异常了。啊,就这么个问题,我花了差不多两天的时间才发现,当时,没想到主要是因为首先查看了网上的一些资料和解决方法,反倒把自己给误导进去了,直到看到自己以前同样的异常消息的解决方法,才想到这些解决方法。
    希望,对大家有所帮助!


  • 相关阅读:
    据说,能找出15个以上的的视力才正常....
    看看用PS来转基因的动物,居然很欢乐!!
    《天引》读书笔记——由新月形面积引发的人类长达2000年的探索。
    练习使用策略模式
    折半查找
    UltraEdit常用配置&搭建Java/C开发环境
    一个操作系统的实现_十分钟完成的操作系统——到这里博客迁移工作圆满结束
    C++中的变量初始化
    LeetCode Range Sum Query
    Peeking Iterator
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3036506.html
Copyright © 2011-2022 走看看