2017-01-05 3 views
2

Ich versuche, einen RSS-Feed mit Java ROM zu analysieren, die diese falsche Version hat:einen Feed mit rss Version Parsing = "2"

<rss version="2"> 

Als ich es "2.0" ändern parst es richtig. Wie kann ich das mit Java ROM umgehen?

Ich könnte Unterklasse RSS20Parser und überschreiben isMyType, aber wo und wie registriere ich diesen neuen Parser?

Antwort

1

Ich löste dies durch Erstellen einer Unterklasse von RSS20Parser und durch Überschreiben isMyType. Dann kopierte ich , fügte die Unterklasse zur Liste der Parser in WireFeedParser.classes hinzu und legte diese Datei auf den Klassenpfad. Ich habe zufällig in Clojure programmiert und hier ist der Code:

(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))))