Real World HaskellのCSVサンプルコードを見た後、私は小さなXMLパーサーを作成しようとしました。ただし、クローズタグは'予期しない"/"'エラーでエラーになります。「closeTag」パーサーが機能しない(または呼び出されない)理由を教えてください。ありがとう!
import Text.ParserCombinators.Parsec
xmlFile = manyTill line eof
line = manyTill tag eol
eol = char '\n'
word = many1 (noneOf "></")
tag = choice [openTag, closeTag, nullTag, word]
nullTag = between (char '<') (string "/>") word
closeTag = between (string "</") (char '>') word
openTag = between (char '<') (char '>') tagContent
attrval = between (char '"') (char '"') word
atts = do {
(char ' ')
; sepBy attr (char ' ')
}
attr = do {
word
; char '='
; attrval
}
tagContent = do {
w <- word
; option [] atts
; return w
}
parseXML :: String -> Either ParseError [[String]]
parseXML input = parse xmlFile "(unknown)" input
main =
do c <- getContents
case parse xmlFile "(stdin)" c of
Left e -> do putStrLn "Error parsing input:"
print e
Right r -> mapM_ print r