Android - SaxParser错误:ParseException:在第1行,第0列:格式不正确(无效令牌)

时间:2013-09-05 22:19:18

标签: android xml saxparser saxparseexception parseexception

尝试解析某些XML时,我遇到以下异常:

org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 0: not well-formed (invalid token)

主要问题是这只发生在Android 2.2或2.3设备中,但最奇怪的是我第一次解析响应时没关系,但以下所有尝试都给了我解析异常。

我的代码如下:

        URL url = new URL("http://m.ideasmusik.com/rss/?ct=mx");
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        //InputSource is = new InputSource("http://m.ideasmusik.com/rss/?ct=mx");
        //is.setEncoding(HTTP.UTF_8);   

        // Parse content
        MusicRSSParser parser = new MusicHandler.MusicRSSParser(); //DefaultHandler
        XMLReader xr = sp.getXMLReader();
        xr.setContentHandler(parser);
        InputSource in = new InputSource(url.openStream());//is.getByteStream());
        in.setEncoding(HTTP.UTF_8);
        xr.parse(in);

XML是UTF-8(我读过这是编码错误的常见问题)。

对出现问题的任何猜测?我认为它可能与我的处理程序有关,但它在我的逻辑应用之前崩溃,就在 startDocument()方法之后。

我尝试使用Url而不是InputStream,结果相同。

修改

如果我去应用程序管理并删除appcaché,那么它第一次就可以了。它如何影响解析?

2 个答案:

答案 0 :(得分:3)

知道了!

问题是RSS有问题!

并非每个浏览器都会显示它(当它们用颜色格式化时会消除问题),但源代码的开头如下:

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
      <rss version=\"2.0\">
          <channel>
               <title>Top Canciones</title>
               <link>m.ideasmusik.com/rss/?ct=mx&</link> ...

问题是XML不能转义&amp; 符号。

所有其他符号都在文档中进行了转义,但我认为它们错过了那个符号,因为它位于链接标记中而不是主要内容。

在第一次运行时,SAX解析器忽略了..

我所做的(在修复RSS时)是获取字符串响应并删除该&amp;在解析XML之前手动完成。我知道这是一个可怕的解决方案,但它是目前最快捷,最简单的解决方案。

答案 1 :(得分:0)

  

但最奇怪的是我第一次解析它的响应   没关系,但以下所有尝试都给我解析异常

我遇到了同样的问题。它发生在一些设备上(例如三星Galaxy S2),不仅在Android 2.3上,而且在以后也是如此。例如。在Galaxy S2(4.4.2)上它会发生,但在仿真器(4.4.2)上却没有。问题可能在于缓存请求。写入带有XML的第二个请求字符串后,再次使用错误的字符编码进行读取。

我解决了(经过大量工作;))我在连接上添加简单的setUseCaches(false)的问题:

    URLConnection conn = url.openConnection();
    conn.setUseCaches(false);