RSS <link>标记上的Jsoup选择器使用.text()方法返回空字符串

Pat*_*ady 3 java rss jsoup

我正在使用使用解析 feed 。尝试选择文档中的第一个元素时,我无法获得结果。<link>

当我使用title.text()此代码时,可以获得预期的结果:

Document doc = Jsoup.connect(BLOG_URL).get();
Element title = doc.select("rss channel title").first();
System.out.println(title.text()); // print the blog title...
Run Code Online (Sandbox Code Playgroud)

但是,link.text()工作方式不同:

Element link = doc.select("rss channel link").first();
System.out.println(link.text()); // prints empty string
Run Code Online (Sandbox Code Playgroud)

当我检查doc.select("rss channel link")Element link对象是人口稠密,但.println()声明仅仅是一个空字符串。

是什么让.select("rss channel link")dang如此特别,以至于我不知道如何使用它?

编辑:RSS响应开始是这样的:

   <?xml version="1.0" encoding="UTF-8"?>
    <rss>
    <channel>
    <title>The Blog Title</title>
    <link>http://www.the.blog/category</link>
Run Code Online (Sandbox Code Playgroud)

luk*_*sch 5

您的rss feed是XML,而不是HTML。为此,必须告诉JSoup使用其XMLParser。这将起作用:

String rss = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
  +"<rss><channel>"
  +  "<title>The Blog Title</title>"
  +  "<link>http://www.the.blog/category</link>"
  +"</channel></rss>";

Document doc = Jsoup.parse(rss, "", Parser.xmlParser());

Element link = doc.select("rss channel link").first();
System.out.println(link.text()); // prints empty string
Run Code Online (Sandbox Code Playgroud)

说明:

HTML中的链接标记采用​​不同的格式,并且Jsoup尝试将<link>您的rss 解释为此类html标记。

  • 很好,谢谢您的澄清。只需抬起头,就可以使用Jsoup connect()解析并进入同一行。`文档doc = Jsoup.connect(RSS_URL).parser(Parser.xmlParser())。get();` (3认同)