2017-01-05 2 views
2

Я пытаюсь разобрать RSS-канал с Java РИМ, которая имеет неверную версию:Синтаксический фид с RSS версией = «2»

<rss version="2"> 

Когда я изменить его "2.0" разбор правильно. Как я могу обойти это с помощью 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)))) 
Смежные вопросы