JavaでRSSを解析する時、Rome Fetcherを使うと簡単に解析ができます。簡単な使い方から、実践的なタグの抜き出しまでを簡単にまとめてみます。

まず、ライブラリのダウンロードは以下より。ROME1.0はJDOM1.1に依存しているので、そちらもダウンロードが必要です。ちなみに、JDOMはバージョン2でなく1なので注意です。

Nashorn(JavaScript)から利用する例ですが、以下のようになります。

// ---
var SyndFeedInput = Java.type("com.sun.syndication.io.SyndFeedInput");
var XmlReader = Java.type("com.sun.syndication.io.XmlReader");
// ---
var feed_url = new java.net.URL(url_s);
var feed_input = new SyndFeedInput(feed_url);
var xml_r = new XmlReader(feed_url);
var feed = feed_input.build(xml_r);
// サイト全体の情報
print(feed.getTitle()); // サイトのタイトルを表示
print(feed.getLink()); // サイトのURLを表示
var list = feed.getEntries();
// 各エントリの情報 --- (*1)
for (var i in list) {
  var entry = list[i];
  var title = entry.getTitle();
  var url = entry.getLink();
  print("---");
  print(title);
  print(url);
}

とは言え、これでは、汎用的な決められた項目しか取得できません。そこで、規格外のRSSフィードを解析したい場合には、次のように、各エントリのgetForeignMarkup()メソッドを利用して、各タグを一つずつチェックしていく行く必要があります。

上記の(*1)の部分を、次のように書き換えます。getForeignMarkup()メソッドの返り値は、ArrayList<org.jdom.Element>なので、各Elementをfor文で回して必要な値を取得するという手順になります。

var list = feed.getEntries();
for (var i in list) {
  var entry = list[i];
  //...
  var fms = entry.getForeignMarkup();
  for (var j in fms) {
    var elm = fms[j];
    print("--" + elm.getName());
    if (elm.getName() == "content") {
      image = elm.getAttribute("url").getValue();
    }
  }
}

参考 *