3

我必须在 Haskell 中解析一个 RSS 文件,然后执行以下操作:

atTag tag = deep (isElem >>> hasName tag)
getRSSDetails = atTag "channel" >>>
   proc p -> do 
      fTitle         <- gotoAndTake "title"        -< p
      fLink          <- gotoAndTake "link"         -< p
      fDescription   <- gotoAndTake "description"  -< p
      fLanguage      <- gotoAndTake "language"     -< p
      fGenerator     <- gotoAndTake "generator"    -< p
      fCopyright     <- gotoAndTake "copyright"    -< p
      fWebMaster     <- gotoAndTake "webMaster"    -< p
      fLastBuildDate <- gotoAndTake "lastBuildDate" -< p
                where gotoAndTake a = (getChildren >>> 
                          isElem >>> 
                          hasName a >>> 
                          getChildren >>> 
                          getText)

我的问题是,当缺少一个标签时,假设 RSS 文件中的“lastBuildDate”比我得到一个空列表,但我只想用“”替换该项目。

我怎样才能做到这一点 ??谢谢,

main = do
   rssFeeds <- runX (parseRSS "rss.xml" >>> getRSSDetails)
   print rssFeeds

EDIT1:通过 orElse在 gotoAndTake a ... 的末尾添加 (constA "") 来解决

4

1 回答 1

1

通过添加解决

orElse (constA "") 

在......的最后

where gotoAndTake a = (getChildren >>> 
                   isElem >>> 
                   hasName a >>> 
                   getChildren >>> 
                   getText)
于 2012-05-22T13:45:19.733 回答