# Module Expat

    module Expat: sig .. end

The Ocaml Expat library provides an interface to the Expat XML Parser.

Expat is a library, written C, for parsing XML documents. It's the underlying for Mozilla, Perl's `XML::Parser`, Python's `xml.parser.expat`, and other open source XML parsers.

To use this library, link with `ocamlc expat.cma` or `ocamlopt expat.cmxa`

    type expat_parser

The type of expat parsers

###### Parser Creation

    val parser_create : encoding:string option -> expat_parser

Create a new XML parser. If encoding is not empty, it specifies a character encoding to use for the document. This overrides the document encoding declaration. Expat has four built in encodings. `US-ASCII`, `UTF-8`, `UTF-16`, `ISO-8859-1`

    val parser_create_ns : encoding:string option -> separator:char -> expat_parser

Create a new XML parser that has namespace processing in effect

    val external_entity_parser_create : expat_parser -> string option -> string option -> expat_parser

Create a new XML_Parser object for parsing an external general entity. Context is the context argument passed in a call to a external_entity_ref_handler. Other state information such as handlers, and namespace processing is inherited from the parser passed as the 1st argument. So you shouldn't need to call any of the behavior changing functions on this parser (unless you want it to act differently than the parent parser).

###### Parsing

    val parse : expat_parser -> string -> unit

Let the parser parse a chunk of an XML document.

- Raises `Expat_error` error

    val parse_bytes : expat_parser -> bytes -> unit

Let the parser parse a chunk of an XML document.

- Raises `Expat_error` error

    val parse_sub : expat_parser -> string -> int -> int -> unit

Let the parser parse a chunk of an XML document in a substring

- Raises `Expat_error` error

    val parse_sub_bytes : expat_parser -> bytes -> int -> int -> unit

Let the parser parse a chunk of an XML document in a substring

- Raises `Expat_error` error

    val final : expat_parser -> unit

Inform the parser that the entire document has been parsed.

###### Handler Setting and Resetting

The strings that are passed to the handlers are always encoded in `UTF-8`. Your application is responsible for translation of these strings into other encodings.

Start element setting and resetting

    val set_start_element_handler : expat_parser -> (string -> (string * string) list -> unit) -> unit

    val reset_start_element_handler : expat_parser -> unit

End element setting and resetting

    val set_end_element_handler : expat_parser -> (string -> unit) -> unit

    val reset_end_element_handler : expat_parser -> unit

Character data hander setting and resetting

    val set_character_data_handler : expat_parser -> (string -> unit) -> unit

    val reset_character_data_handler : expat_parser -> unit

Processing Instruction handler setting and resetting

    val set_processing_instruction_handler : expat_parser -> (string -> string -> unit) -> unit

    val reset_processing_instruction_handler : expat_parser -> unit

Comment handler setting and resetting

    val set_comment_handler : expat_parser -> (string -> unit) -> unit

    val reset_comment_handler : expat_parser -> unit

CData Section handler setting and resetting

    val set_start_cdata_handler : expat_parser -> (unit -> unit) -> unit

    val reset_start_cdata_handler : expat_parser -> unit

    val set_end_cdata_handler : expat_parser -> (unit -> unit) -> unit

    val reset_end_cdata_handler : expat_parser -> unit

Default Handler setting and resetting

    val set_default_handler : expat_parser -> (string -> unit) -> unit

    val reset_default_handler : expat_parser -> unit

External Entity Ref Handler setting and resetting

    val set_external_entity_ref_handler : expat_parser ->
           (string option -> string option -> string -> string option -> unit) -> unit

    val reset_external_entity_ref_handler : expat_parser -> unit

###### Parse Position Functions

    val get_current_byte_index : expat_parser -> int

    val get_current_column_number : expat_parser -> int

    val get_current_line_number : expat_parser -> int

    val get_current_byte_count : expat_parser -> int

###### Error Reporting

    type xml_error =

`|` | `NONE`
`|` | `NO_MEMORY`
`|` | `SYNTAX`
`|` | `NO_ELEMENTS`
`|` | `INVALID_TOKEN`
`|` | `UNCLOSED_TOKEN`
`|` | `PARTIAL_CHAR`
`|` | `TAG_MISMATCH`
`|` | `DUPLICATE_ATTRIBUTE`
`|` | `JUNK_AFTER_DOC_ELEMENT`
`|` | `PARAM_ENTITY_REF`
`|` | `UNDEFINED_ENTITY`
`|` | `RECURSIVE_ENTITY_REF`
`|` | `ASYNC_ENTITY`
`|` | `BAD_CHAR_REF`
`|` | `BINARY_ENTITY_REF`
`|` | `ATTRIBUTE_EXTERNAL_ENTITY_REF`
`|` | `MISPLACED_XML_PI`
`|` | `UNKNOWN_ENCODING`
`|` | `INCORRECT_ENCODING`
`|` | `UNCLOSED_CDATA_SECTION`
`|` | `EXTERNAL_ENTITY_HANDLING`
`|` | `NOT_STANDALONE`
`|` | `UNEXPECTED_STATE`
`|` | `ENTITY_DECLARED_IN_PE`
`|` | `FEATURE_REQUIRES_XML_DTD`
`|` | `CANT_CHANGE_FEATURE_ONCE_PARSING`

    exception Expat_error of xml_error

Exception raised by parse function to report error conditions

    val xml_error_to_string : xml_error -> string

Converts a xml_error to a string

###### Miscellaneous Functions

    val set_base : expat_parser -> string option -> unit

Set the base to be used for resolving relative URIs in system identifiers.

    val get_base : expat_parser -> string option

Get the base for resolving relative URIs.

    type xml_param_entity_parsing_choice =

`|` | `NEVER`
`|` | `UNLESS_STANDALONE`
`|` | `ALWAYS`

Parameter entity handling types

    val set_param_entity_parsing : expat_parser -> xml_param_entity_parsing_choice -> bool

Enable the parsing of parameter entities

    val expat_version : unit -> string

Return the Expat library version as a string (e.g. "expat_1.95.1"