hxt- A collection of tools for processing XML with Haskell.

CopyrightCopyright (C) 2005-9 Uwe Schmidt
MaintainerUwe Schmidt (uwe@fh-wedel.de)
Safe HaskellNone



Compound arrow for writing XML documents



writeDocument :: SysConfigList -> String -> IOStateArrow s XmlTree XmlTree Source #

the main filter for writing documents

this filter can be configured by an option list like readDocument

usage: writeDocument optionList destination

if destination is the empty string or "-", stdout is used as output device

for available options see SystemConfig

  • withOutputXML : (default) issue XML: quote special XML chars >,<,",',& where neccessary add XML processing instruction and encode document with respect to output encoding,
  • withOutputHTML : issue HTML: translate all special XML chars and all HTML chars with a corresponding entity reference into entity references. Do not generate empty elements, e.g. .../ for HTML elements, that are allowed to contain a none empty body. Result is for the example is .../script. The short form introduces trouble in various browsers.
  • withOutputXHTML : same as withOutputHTML, but all none ASCII chars are substituted by char references.
  • withOutputPLAIN : Do not substitute any chars. This is useful when generating something else than XML/HTML, e.g. Haskell source code.
  • withXmlPi yes/no : Add a version=... encoding=... ? processing instruction to the beginning of the document. Default is yes.
  • withAddDefaultDTD : if the document to be written was build by reading another document containing a Document Type Declaration, this DTD is inserted into the output document (default: no insert)
  • withShowTree yes/no : show DOM tree representation of document (for debugging)
  • withShowHaskell yes/no : show Haskell representaion of document (for debugging)

a minimal main program for copying a document has the following structure:

module Main

import Text.XML.HXT.Core

main        :: IO ()
    = do
      runX ( readDocument  [] "hello.xml"
             writeDocument [] "bye.xml"
      return ()

an example for copying a document from the web to standard output with global trace level 1, input trace level 2, output encoding isoLatin1, and evaluation of error code is:

module Main

import Text.XML.HXT.Core
import Text.XML.HXT.Curl
-- or
-- import Text.XML.HXT.HTTP
import System.Exit

main        :: IO ()
    = do
      [rc] <- runX
              ( configSysVars [ withTrace 1          -- set the defaults for all read-,
                              , withCurl []          -- write- and other operations
                                -- or withHTTP []
                readDocument  [ withTrace     2      -- use these additional
                              , withParseHTML yes    -- options only for this read
                writeDocument [ withOutputEncoding isoLatin1
                              ""                     -- output to stdout
      exitWith ( if rc >= c_err
                 then ExitFailure 1
                 else ExitSuccess

writeDocumentToString :: ArrowXml a => SysConfigList -> a XmlTree String Source #

Convert a document into a string. Formating is done the same way and with the same options as in writeDocument. Default output encoding is no encoding, that means the result is a normal unicode encode haskell string. The default may be overwritten with the withOutputEncoding option. The XML PI can be suppressed by the a_no_xml_pi option.

This arrow fails, when the encoding scheme is not supported. The arrow is pure, it does not run in the IO monad. The XML PI is suppressed, if not explicitly turned on with an option (a_no_xml_pi, v_0)

prepareContents :: ArrowXml a => XIOSysState -> (Bool -> Bool -> String -> a XmlTree XmlTree) -> a XmlTree XmlTree Source #

indent and format output