尝试解析某些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é,那么它第一次就可以了。它如何影响解析?
答案 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);