content: -- |
  -- This is a simple example for parsing and validating an XML file and printing the generated
  -- XmlTree to standard out.
  --
  -- Author : .\\artin Schmidt
  -- Version : $Id: ParseExample.hs,v 1.4 2004/09/02 19:11:53 hxml Exp $
  
  module Main(main)
  where
  
  import Text.XML.HXT.Parser
  
  import System.IO
  import System
  
  --
  -- call this program with a single parameter for the file or uri to be processed
  -- e.g. ParseExample example1.xml
  
  main :: IO ()
  main
      = do
        argv <- getArgs
                                -- take the first cmdline argument as source name
                                -- start the XState monad with the runParser command
        res  <- run' $ parser [(a_source, head argv)] emptyRoot
        exitProg res
  
  -- run a command in the XState monad.
  -- this monad includes the IO monad, a system state for global options
  -- and a user definable state (type parameter state). This user state is
  -- set to () (the empty state) by the run' command.
  -- There are more general run commands: run, run0 in case of a proccessing
  -- function, that requires e.g. an environment
  
  parser  :: Attributes -> XmlStateFilter ()
  parser al
      = parseDocument al
        .>>
        writeDocument [(a_indent, v_1)]   -- indent document and output to stdout
        .>>
        checkStatus                       -- check status
  
  -- ------------------------------------------------------------
  
  exitProg        :: [a] -> IO ()
  exitProg []     = exitWith (ExitFailure 1)
  exitProg _      = exitWith ExitSuccess
  
  -- ------------------------------------------------------------
  