2017-01-05 56 views
2

我試圖解析與Java ROME一個RSS feed具有這種不正確的版本:當我將其更改爲"2.0"解析與RSS版本飼料=「2」

<rss version="2"> 

它正確解析。我如何使用Java ROME解決這個問題?

我可以繼承RSS20Parser並覆蓋isMyType但我在哪裏以及如何註冊這個新的解析器?

回答

1

我通過創建RSS20Parser的子類和覆蓋isMyType解決了這個問題。然後我複製rome.properties,將子類添加到WireFeedParser.classes中的解析器列表中,並將該文件放在類路徑中。我碰巧在Clojure編程,這裏是代碼:

(ns feeds.rss20-parser 
    (:import (com.rometools.rome.io.impl RSS20Parser) 
      (org.jdom2 Document)) 
    (:gen-class 
    :name feeds.RSS20Parser 
    :extends com.rometools.rome.io.impl.RSS20Parser 
    :exposes-methods {isMyType parentIsMyType})) 

(defn version [^Document doc] 
    (some-> doc 
      .getRootElement 
      (.getAttribute "version") 
      .getValue 
      .trim)) 

(defn -isMyType [^feeds.RSS20Parser this ^Document doc] 
    (or (.parentIsMyType this doc) 
     (= "2" (version doc))))