首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Haskell中解析FB2(XML

在Haskell中解析FB2(XML
EN

Stack Overflow用户
提问于 2011-10-10 03:14:01
回答 1查看 441关注 0票数 2

开始学习Haskell时,我决定熟悉Parsec,但也存在一些问题。我正在尝试以FB2格式实现对书籍的解析。在传统的标签上(文本)是好的,但当标签内的标签-不工作。

代码语言:javascript
复制
import Text.ParserCombinators.Parsec

data FB2Doc = Node String FB2Doc
            | InnText String
            deriving (Eq,Show)

parseFB2 :: GenParser Char st [FB2Doc]
parseFB2 = many test

test :: GenParser Char st FB2Doc
test = do name <- nodeStart
          value <- getvalue
          nodeEnd
          return $ Node name value

nodeStart = do char '<'
               name <- many (letter <|> digit <|> oneOf "-_")
               char '>'
               return name

nodeEnd = do string "</"
             many (letter <|> digit)
             char '>'
             spaces 
gettext = do x <- many (letter <|> digit <|> oneOf "-_")
             return $ InnText x 

getvalue = do (nodeStart >> test) <|> gettext <|> return (Node "" (InnText ""))
main = do
         print $ parse parseFB2 "" "<h1><a2>ge</a2></h1> <genre>history_russia</genre>"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-10 20:43:45

我想你想要的是:

代码语言:javascript
复制
getvalue = try test <|> gettext

空节点需要try"<bla></bla>"test将使用</bla>'<'try允许回溯。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7705885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档