android XML解析器不解析完整的链接

时间:2012-04-29 06:43:52

标签: android xml-parsing

所以,我一直致力于解析从互联网(RSS)获取的XML文件。

我一直在根据IBM的解析器工作here

不幸的是,当我尝试解析看起来像这样的链接时:

http://www.website.net/index.php?option=com_adsmanager&page=display&catid=87&tid=208196

但我的解析器只显示链接为:http://www.website.net/index.php?option=,其余链接正在被切断。

关于如何解决此问题的任何想法?

编辑1:

SaxParser甚至根本不起作用。它声称(错误地)文档格式不正确,但我知道它不是真的,因为它被检查并加倍检查。

编辑2:

NodeList有多个孩子,每个&符号都会创建一个新节点。

因此,我的代码:

if (name.equalsIgnoreCase(LINK)) {
    val = property.getFirstChild().getNodeValue();
    message.setLink(val);
}

不好。所以,我把它修改为这段代码:

if (name.equalsIgnoreCase(LINK)) {
    val = "";
    NodeList list = property.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {
        val += list.get(i).getNodeValue().toString();
    }
    message.setLink(val);
}

这是在DOM XML提要解析器中执行此操作的方法。现在,我所要做的就是找到一种方法,在IBM示例的不同解析器中执行此操作。

2 个答案:

答案 0 :(得分:1)

<link>http://www.website.net/index.php?option=com_adsmanager&page=display&catid‌​=87&tid=208196</link> 

...不是有效的XML,因为&后面没有有效的xml entities

有几种方法可以解决这个问题:

逃离&

<link>http://www.website.net/index.php?option=com_adsmanager&amp;page=display&amp;catid‌​=87&amp;tid=208196</link> 

CDATA

中包裹link部分
<link><![CDATA[http://www.website.net/index.php?option=com_adsmanager&page=display&catid‌​=87&tid=208196]]></link> 

如果您无法控制RSS文件创建,则必须在将文档提供给XML解析器之前对其进行预处理。移动宽容的xml解析器(如TagSoup)可能会有所帮助。

答案 1 :(得分:0)

好。我解决了这个问题。

我的第二次更新是对问题的正确看法。 NodeList有多个孩子,每个&符号都会创建一个新节点。

因此,我的代码:

if (name.equalsIgnoreCase(LINK)) {
    val = property.getFirstChild().getNodeValue();
    message.setLink(val);
}

不好。所以,我把它修改为这段代码:

if (name.equalsIgnoreCase(LINK)) {
    val = "";
    NodeList list = property.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {
        val += list.get(i).getNodeValue().toString();
    }
    message.setLink(val);
}

这是在DOM XML提要解析器中执行此操作的方法