hxt-7.1: src/Text/XML/HXT/Parser/XmlParser.hs
-- |
-- Xml Parser: the main parse filter
--
-- Version : $Id: XmlParser.hs,v 1.5 2005/06/06 15:57:19 hxml Exp $
module Text.XML.HXT.Parser.XmlParser
( module Text.XML.HXT.Parser.XmlParsec
, module Text.XML.HXT.Parser.XmlTokenParser
, parseXmlDoc
)
where
import Text.XML.HXT.DOM.XmlTree
import Text.XML.HXT.DOM.XmlState
import Text.XML.HXT.Parser.XmlTokenParser
import Text.XML.HXT.Parser.XmlParsec
import Text.XML.HXT.Parser.XmlOutput
( traceTree
, traceSource
, traceMsg
)
-- ------------------------------------------------------------
-- |
-- The monadic parser for a whole document.
-- input must be a root node with a single text child.
-- Error messages are issued and global error state is set.
parseXmlDoc :: XmlStateFilter a
parseXmlDoc
= parseDoc
`whenM` ( isRoot .> getChildren .> isXText )
where
parseDoc t
= ( traceMsg 2 ("parseXmlDoc: parse XML document " ++ show loc)
.>>
parser
.>>
liftMf checkRes
.>>
traceTree
.>>
traceSource
) $ t
where
loc = valueOf a_source t -- document name
checkRes
= setStatus c_err ("parsing XML source " ++ show loc)
`whenNot`
getChildren
parser
= processChildrenM (liftF (parseXmlText document' loc))
-- ------------------------------------------------------------