packages feed

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))

-- ------------------------------------------------------------