所以,我一直致力于解析从互联网(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示例的不同解析器中执行此操作。
答案 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&page=display&catid=87&tid=208196</link>
中包裹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提要解析器中执行此操作的方法