Ошибка Jsoup при разборе RSS?

Я пытаюсь получить список ссылок на статьи из этого канала:

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");

он не захватывает ни одну из ссылок.


person Samson Hu    schedule 23.11.2011    source источник
comment
Я даже не мог заставить JSoup обрабатывать RSS-каналы. Это дает мне Unhandled content type application/rss+xml; charset=iso-8859-1. Однако парсеры org.w3c.dom и org.xml.sax работают нормально.   -  person styfle    schedule 25.03.2012


Ответы (1)


JSoup — это парсер HTML, в HTML элемент link определен как имеющий пустую модель содержимого. Указанный вами URL-адрес содержит допустимый xml, так почему бы вам не попробовать реальный синтаксический анализатор xml или библиотеку синтаксического анализатора каналов, например рим?

Редактировать. Чтобы извлечь ссылки из файла с помощью реализации 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);
}
person Jörn Horstmann    schedule 23.11.2011
comment
значит ли это, что я не могу захватывать случайные теги с помощью doc.select("myRandomTagName");? - person Indrek Kõue; 23.11.2011
comment
В HTML-файлах обычно можно, а в произвольных файлах, использующих элементы с семантикой, отличной от HTML, похоже, нельзя. Смотрите мое редактирование для альтернативного решения. - person Jörn Horstmann; 24.11.2011