2011-11-23 39 views
2

我试图抓住的链接,从该饲料的文章的列表:解析RSS时出现Jsoup bug?

http://rss.cbc.ca/lineup/topstories.xml

然而,当Jsoup读取它,在标签中的链接<link>http://www.cbc.ca/news/?cmp=rss</link>成为<link />http://www.cbc.ca/news/?cmp=rss

即标签自我关闭,如果我做

Elements items = doc.select("link"); 

它不抓住任何链接。

+0

我甚至不能JSoup处理RSS提要。它给了我'未处理的内容类型应用程序/ rss + xml;字符集=异8859-1'。 org.w3c.dom和org.xml.sax解析器可以正常工作。 – styfle

回答

5

JSoup是一个HTML解析器,在HTML中,link元素被定义为具有空的内容模型。您提供的网址似乎包含有效的xml,那么为什么不尝试实际的xml解析器或像rome这样的提要解析器库?

编辑:要提取使用JDK的XPath实现从文件的链接,你可以使用如下代码:

XPathFactory xpf = XPathFactory.newInstance(); 
XPath xp = xpf.newXPath(); 
InputSource is = new InputSource("http://rss.cbc.ca/lineup/topstories.xml"); 
NodeList nodes = (NodeList)xp.evaluate("//link", is, XPathConstants.NODESET); 
for (int i=0, len=nodes.getLength(); i<len; i++) { 
    Node node = nodes.item(i); 
    String link = node.getTextContent(); 
    System.out.println(link); 
} 
+0

那么这意味着我不能用'doc.select(“myRandomTagName”);'?来捕获随机标签? –

+0

对于HTML文件,通常可以在使用HTML中不同语义元素的任意文件上看起来不可以。查看我的编辑了解其他解决方案。 –