1

尝试解析某些 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,结果相同。

编辑

如果我去应用程序管理并擦除应用程序缓存,那么它第一次可以正常工作。它如何影响解析?

4

2 回答 2

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 不能有&符号而不被转义。

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

SAX 解析器在第一次运行时不知何故忽略了这一点..

我所做的(虽然 RSS 是固定的)是在解析 XML 之前获取字符串响应并手动删除它。我知道这是一个可怕的解决方案,但它是目前最快和最简单的解决方案。

于 2013-09-06T23:09:08.810 回答
0

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

我有同样的问题。它发生在某些设备(例如三星 Galaxy S2)上,不仅在 android 2.3 上,而且在以后也发生。例如,在 Galaxy S2 (4.4.2) 上会发生,但在模拟器 (4.4.2) 上不会。问题可能在于缓存请求。在第二个带有 XML 的请求字符串被写入并再次读取时,使用了错误的字符编码。

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

    URLConnection conn = url.openConnection();
    conn.setUseCaches(false);
于 2017-05-06T11:48:41.687 回答