{-# LANGUAGE OverloadedStrings #-} -- | All documentation examples assume the following setup: -- -- > :set -XOverloadedStrings -- > import Data.Attoparsec.ByteString module Data.XML.Parser.Mid.Attribute ( Attribute(..) , attribute ) where import Data.XML.Parser.Low import Text.Parser.Char import Text.Parser.Combinators -- $setup -- >>> :set -XOverloadedStrings -- >>> import Data.Attoparsec.ByteString -- | <https://www.w3.org/TR/REC-xml/#dt-attr> data Attribute = Attribute QName [Content] deriving (Eq, Ord, Read, Show) -- | <https://www.w3.org/TR/REC-xml/#NT-Attribute> -- -- >>> parseOnly attribute "name = 'value'" -- Right (Attribute (QName {namePrefix = "", nameLocal = "name"}) [ContentText "value"]) attribute :: CharParsing m => Monad m => m Attribute attribute = do key <- tokenQualifiedName tokenEqual quote <- oneOf "'\"" value <- many $ tokenContent [quote, '<'] char quote return $ Attribute key value