-------------------------------------------------------------------------------
Xmlm - Streaming XML IO for OCaml
       Release 1.1.1
-------------------------------------------------------------------------------

Xmlm is an OCaml module for streaming XML IO. It aims at making XML
processing robust and painless. The streaming interface can process
documents without building an in-memory representation. It lets the
programmer translate its data structures to XML documents and
vice-versa. Functions are provided to easily transform arborescent
data structures to/from XML documents.

Xmlm is made of a single independent module and distributed under the
BSD3 license. 

Home page: http://erratique.ch/software/xmlm
Contact: Daniel Bünzli <daniel.buenzli at erratique.ch>


Installation
------------

To install Xmlm you need at least : 

    OCaml >= 3.10.0  

If you have `findlib`, it can be installed by typing :

    ocaml setup.ml -configure
    ocaml setup.ml -build 
    ocaml setup.ml -install

If you don't, `xmlm.mli` and `xmlm.ml` contain everything, the
code, the documentation and the license. Install the dependencies and
use the sources the way you want. For example if you use `ocamlbuild`
you can issue the following commands from the root directory of your
project:

    ln -s /path/to/xmlm-1.1.1/src xmlm
    echo "<xmlm> : include" >> _tags


Documentation
-------------

The documentation and API reference is automatically generated by
`ocamldoc` from `xmlm.mli`. For you convenience you can find a
generated version in the `doc` directory of the distribution.


Sample programs
---------------

A test program, `xmltrip`, is provided in the `test` directory. It can
be built with :

    ocamlbuild test/xmltrip.native

`xmltrip` reads XML files with Xmlm and outputs them back in various
ways. It is useful to understand how Xmlm handles documents. `xmltrip
-help` has more information.

If you need to parse XHTML, there is a file named `xhtml.ml` in the
`test` directory. It contains an OCaml list coupling each XHTML
character entity with its corresponding UTF-8 encoded character
string. You can use it to program a suitable entity callback.
