hexpat: XML parser/formatter based on expat

[ bsd3, library, xml ] [ Propose Tags ] [ Report a vulnerability ]

This package provides a general purpose Haskell XML library using Expat to do its parsing (http://expat.sourceforge.net/ - a fast stream-oriented XML parser written in C). It is extensible to any string type, with String, ByteString and Text provided out of the box.

Basic usage: Parsing a tree (Tree), formatting a tree (Format). Other features: Helpers for processing XML trees (Proc), trees annotated with XML source location (Annotated), extended XML trees with comments, processing instructions, etc (Extended), XML cursors (Cursor), SAX-style parse (SAX), and access to the low-level interface in case speed is paramount (Internal.IO).

The design goals are speed, speed, speed, interface simplicity and modularity.

For introduction and examples, see the Text.XML.Expat.Tree module. For benchmarks, http://haskell.org/haskellwiki/Hexpat/

If you want to do interactive I/O, an obvious option is to use lazy parsing with one of the lazy I/O functions such as hGetContents. However, this can be problematic in some applications because it doesn't handle I/O errors properly and can give no guarantee of timely resource cleanup. Because of the generalized list, Hexpat is designed to allow for chunked I/O, but as of this writing I haven't done a nice integration with enumerator and friends.

IO is filed under Internal because it's low-level and most users won't want it. The other Internal modules are re-exported by Annotated, Tree and Extended, so you won't need to import them directly.

If you have trouble building on Windows, you can try the bundle flag. This will make it build from the source of libexpat bundled inside the hexpat package: cabal install -f bundle hexpat

Credits to Iavor Diatchki and the xml (XML.Light) package for Proc and Cursor. Thanks to the many contributors.

ChangeLog: 0.15 changes intended to fix a (rare) "error: a C finalizer called back into Haskell." that seemed only to happen only on ghc6.12.X; 0.15.1 Fix broken Annotated parse; 0.16 switch from mtl to transformers; 0.17 fix mapNodeContainer & rename some things.; 0.18 rename defaultEncoding to overrideEncoding. 0.18.3 formatG and indent were demanding list items more than once (inefficient in chunked processing); 0.19 add Extended.hs; 0.19.1 fix a memory leak introduced in 0.19, delegate parsing to bound thread if unbound (see note above); 0.19.2 include expat source code so 'cabal install' just works on Linux, Mac and Windows (thanks Jacob Stanley); 0.19.3 fix misconfiguration of expat which broke entity parsing; 0.19.4 bump version constraint for text; 0.19.5 bump text to < 0.12 and fix text-0.10.0.1 breakage; 0.19.6 dependency breakage with List; 0.19.7 ghc-7.2.1 compatibility; 0.19.8 fix space leak on lazy parse under ghc-7.2.1; 0.19.9 fix formatting of > character + improve performance; 0.19.10 ghc-7.4.x compatibility; 0.20.1 fix an unfortunate crash when used in parallel processing and greatly improve performance; 0.20.2 make parseSaxG lazier; 0.20.3 minor build issues; 0.20.4 remove dependency on extensible-exceptions; 0.20.5 bump text upper bound; 0.20.6 bump text again to include 1.1.x.x; 0.20.7 bump text again for 1.2.x.x; 0.20.8 bump utf8-string dep; 0.20.9 bump deepseq dep/ghc-7.10 compatibility.; 0.20.10 increase dependency upper bounds; 0.20.11 update to libexpat-2.2.1 which includes several security fixes; 0.20.12 use the system libexpat by default, but provide a bundle flag to allow a bundled copy of expat to be used, which might make life easier on Windows: cabal install -f bundle hexpat; 0.20.13 Fix some mistakes made in 0.20.12 cabal file.

Flags

Automatic Flags
NameDescriptionDefault
bundle

Use bundled libexpat

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.15.1, 0.16, 0.17, 0.18, 0.18.1, 0.18.2, 0.18.3, 0.19, 0.19.1, 0.19.2, 0.19.3, 0.19.4, 0.19.5, 0.19.6, 0.19.7, 0.19.8, 0.19.9, 0.19.10, 0.20.1, 0.20.2, 0.20.3, 0.20.4, 0.20.5, 0.20.6, 0.20.7, 0.20.8, 0.20.9, 0.20.10, 0.20.11, 0.20.12, 0.20.13
Dependencies base (>=3 && <5), bytestring, containers, deepseq (>=1.1.0.0 && <1.7), List (>=0.4.2 && <0.7), text (>=0.5.0.0 && <1.3 || >=2 && <2.2), transformers, utf8-string (>=0.3 && <1.1) [details]
License BSD-3-Clause
Copyright (c) 2009 Doug Beardsley <mightybyte@gmail.com>, (c) 2009-2012 Stephen Blackheath <http://blacksapphire.com/antispam/>, (c) 2009 Gregory Collins, (c) 2008 Evan Martin <martine@danga.com>, (c) 2009 Matthew Pocock <matthew.pocock@ncl.ac.uk>, (c) 2007-2009 Galois Inc., (c) 2010 Kevin Jardine, (c) 2012 Simon Hengel
Author Stephen Blackheath [blackh] (the primary author), Doug Beardsley, Gregory Collins, Evan Martin (who started the project), Matthew Pocock [drdozer], Kevin Jardine, Jacob Stanley, Simon Hengel
Maintainer Stephen Blackheath <hexpat2.stephen@blacksapphire.com>
Revised Revision 3 made by lysergia at 2024-09-08T18:41:45Z
Category XML
Home page http://haskell.org/haskellwiki/Hexpat/
Source repo head: git clone https://github.com/the-real-blackh/hexpat
Uploaded by StephenBlackheath at 2017-06-21T23:58:54Z
Distributions FreeBSD:0.20.9, LTSHaskell:0.20.13, NixOS:0.20.13, Stackage:0.20.13
Reverse Dependencies 27 direct, 259 indirect [details]
Downloads 61742 total (186 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2017-06-22 [all 1 reports]