我在尝试解析一些 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 得到相同的结果。
编辑
如果我转到“应用程序管理”并清除应用程序缓存,那么它工作正常,这是第一次。它如何影响解析??
最佳答案
知道了!
问题是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 之前手动删除它。我知道这是一个糟糕的解决方案,但它是目前最快、最简单的解决方案。
关于Android - SaxParser 错误 : ParseException: At line 1, 第 0 列:格式不正确(无效 token ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18646845/