Android SAXParseException:意外的文档结束

时间:2013-12-20 13:48:46

标签: android xml

我在解析XML时遇到此异常,但并非总是如此。出错后当我立即再试一次时,它有效。但为什么我得到这个错误? 这也是我的代码和错误。

        StringEntity entity = new StringEntity(author, "UTF-8");        
        DefaultHttpClient httpClient = new DefaultHttpClient();
        SharedPreferences logIn = context.getSharedPreferences("Data", Context.MODE_PRIVATE);
        HttpPost httppost = new HttpPost(logIn.getString("Url", ""));
        httppost.setEntity(entity);  
        httppost.addHeader("Accept", "text/xml");               
        httppost.addHeader("Content-Type", "text/xml");
        HttpResponse response = httpClient.execute(httppost);                           
        HttpEntity r_entity = response.getEntity();
        xmlRecords  = EntityUtils.toString(r_entity);
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        InputSource is = new InputSource();
        is.setCharacterStream(new StringReader(xmlRecords));
        Document doc = db.parse(is);
            NodeList workItemsNode = doc.getElementsByTagName("Items");
         for (int i = 0; i < workItemsNode.getLength(); i++) {

                 //Some Code here

             }

异常

  

org.xml.sax.SAXParseException:文档的意外结束         在org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:125)         在com.mobile.syrinx.services.SynchroniseWorkItemsService.FillLists(SynchroniseWorkItemsService.java:101)         在com.mobile.syrinx.services.SynchroniseWorkItemsService.doInBackground(SynchroniseWorkItemsService.java:65)         在com.mobile.syrinx.services.SynchroniseWorkItemsService.doInBackground(SynchroniseWorkItemsService.java:1)         在android.os.AsyncTask $ 2.call(AsyncTask.java:252)         at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305)         在java.util.concurrent.FutureTask.run(FutureTask.java:137)         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)         at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:574)         在java.lang.Thread.run(Thread.java:1020)

1 个答案:

答案 0 :(得分:2)

1)确认您收到的是有效的XML。如果您正在使用从Web服务提供给您的XML,那么谁知道您将获得什么。无效的XML可能会导致很多这些解析器出现问题。只有这种情况发生的因素有时让我认为这很可能是罪魁祸首。

DocumentBuilder文档在这里:

http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/DocumentBuilder.html#parse(org.xml.sax.InputSource)

您可以看到解析xml时出现错误时抛出了SAX异常,这意味着xml无论如何都是无效的。应该抓住并处理例外情况。

2)您正在解析的文件是否源自您所采用的操作系统?这在过去引起了我的问题,其中一个Windows文件导致linux系统上的解析器出错。 不应该在这里我不认为是问题,但它是可能的。