| ## The Expat XML Parser
Expat is an XML parser library written in C. It is a stream-oriented parser in which an application registers handlers for things the parser might find in the XML document (like start tags). An introductory article on using Expat is available on xml.com. Expat project page (includes downloads) Mailing lists 3rd-party wrappers (SAX, DOM, other language bindings) CVS repository (browse online) Bug reports Notes for Expat maintainers This project aims to maintain Expat for both current and future users while improving the API to allow more reliable and robust access from "scripting" languages such as Python and Perl. We invite the community to participate on the mailing lists to help shape the future of Expat. ### News 20 October 2003, Expat 1.95.7 released. Fixed `enum XML_Status` issue (reported on SourceForge many times), so compilers that are properly picky will be happy. Introduced an `XMLCALL` macro to control the calling convention used by the Expat API; this macro should be used to annotate prototypes and definitions of callback implementations in code compiled with a calling convention other than the default convention for the host platform. Improved ability to build without the configure-generated expat_config.h header. This is useful for applications which embed Expat rather than linking in the library. Fixed a variety of bugs: see SF issues 458907, 609603, 676844, 679754, 692878, 692964, 695401, 699323, 699487, 820946. Improved hash table lookups. Added more regression tests and improved documentation. Our plan is to wait for a short while and re-release this version as the long-awaited Expat 2.0 if no major problems are identified. If significant problems are found, additional iterative releases will be made as fixes are made. 15 October 2003, Upcoming release. We're working on getting the long-delayed Expat 1.95.7 out the door. A snapshot of the current source code is available as expat-2003-10-15.tar.gz; please give this a try on your platform and report how it works for you to the expat-discuss mailing list. Our goals for this release are portability and stability. 28 January 2003, Expat 1.95.6 released. Added `XML_FreeContentModel()`. Added `XML_MemMalloc()`, `XML_MemRealloc()`, `XML_MemFree()`. Fixed a variety of bugs: see SF issues 615606, 616863, 618199, 653180, 673791. Enhanced the regression test suite. Man page improvements: includes SF issue 632146. 6 September 2002, Expat 1.95.5 released. Added `XML_UseForeignDTD()` for improved SAX2 support. Added `XML_GetFeatureList()`. Defined `XML_Bool` type and the values `XML_TRUE` and `XML_FALSE`. Use an incomplete struct instead of a `void*` for the parser. Fixed UTF-8 decoding bug that caused legal UTF-8 to be rejected. Finally fixed bug where default handler would report DTD events that were already handled by another handler. Initial patch contributed by Darryl Miles. Removed unnecessary `DllMain()` function that caused static linking into a DLL to be difficult. Added VC++ projects for building static libraries. Reduced line-length for all source code and headers to be no longer than 80 characters, to help with AS/400 support. Reduced memory copying during parsing (SF patch #600964). Fixed a variety of bugs: see SF issues 580793, 434664, 483514, 580503, 581069, 584041, 584183, 584832, 585537, 596555, 596678, 598352, 598944, 599715, 600479, 600971. 4 September 2002, Development roadmap published. The initial version of the development roadmap was released for comment. Old news archive ### References & 3rd-party Wrappers If you know of any additional articles or resources which should be linked to from this page, please send email to Fred Drake (fdrake@acm.org). We're especially interested in links to tutorial information and open source interfaces to Expat from languages other than C. James Clark's original Expat page, for Expat 1.2 and earlier Introductory article on using Expat on xml.com Perl's `XML::Parser` module is a wrapper built around a binding to Expat in the `XML::Parser::Expat` module. Documentation for the Python interface to Expat, part of the standard documentation for Python. SAXExpat.NET, a .NET wrapper for Expat, conforming to the SAX.NET specifications. The Simple C Expat Wrapper is a wrapper around Expat that provides a light-weight object model somewhat like a DOM. C++ Wrappers for the Expat XML Parser, an article by Tim Smith providing object-oriented wrappers for Expat. The wrappers use some MFC-biased naming, but look interesting. Arabica -- an XML Parser toolkit for C++ programmers, with SAX2 implementations based on several parsers, including Expat. expatpp -- C++ interface to Expat SAX2 Wrapper for using Expat in Delphi, based on "SAX for Pascal" interface specs The TclXML project includes a Tcl binding for Expat tDOM is an alternate package providing XML support for Tcl, based in part on Expat. Article on using Expat from PHP on <?PHPBuilder?> (broken into lots of tiny pieces) Objective-C interface to Expat OCaml Expat is a wrapper around Expat for the Objective Caml language. Ruby interface to Expat XML Tools 2 is an AppleScript scripting addition that allows AppleScript applications to work with XML data; it is based on Expat. Simkin is an open source scripting language available under the GNU LGPL. It can be embedded in XML and supports a DOM-like API backed by Expat. EasySoap is a C++ SOAP implementation which uses Expat. A discussion of another way to manage stateful callbacks, using Expat as a sample library. The GOBO project is working on an Eiffel binding for Expat. Development is active and the package is fully supported in GOBO 3.0 and 3.1, though there isn't much status information about the Expat bindings on the website. (Most activity is reportedly on the relevant mailing lists.) Expat4D is a plug-in for the 4th Dimension application framework.