LMX is a reverse XML parser. (LMX is XML backwards, get it?) It is event-based, and returns every entity in the XML document in reverse order.
For example, given the XML document:
<foo> <bar>Hello</bar> <baz>Goodbye</baz> </foo>
the events you receive from LMX will be:
The API in the LMX 1.0 series is only available for Obj-C/Cocoa on Mac OS X. It has mostly the same API as NSXMLParser; if you're used to NSXMLParser, LMX should have no learning curve for you (other than the mind-bendingness of events coming in in the reverse order). LMX 2.0 will add a pure C implementation and API, with an Obj-C/Cocoa wrapper, and will be cross-platform.
A test app is included, for timing and testing purposes.
LMX is already in use. It is currently used by Adium, powering its message history. The last n messages from your previous chat with the same person are read from the logs, which are in an XML format, then display. Adium uses LMX so that this process is O(1) (independent of the number of messages in a transcript), rather than O(m) (dependent on the number of messages in a transcript) as it would be with a conventional XML parser.
LMX is provided under a three-clause BSD license.
If you want to contribute a patch to LMX, the easiest way is to work from the Subversion repository. The URL for LMX's Subversion repository is svn://svn.adiumx.com/liblmx, though I recommend using the 1.0 branch.