
Hi , Perhaps you can get some additional ideas from my xml lib, it's not finished yet, but it already works. You can download it here: http://download.nicai-systems.com/xmlpp/xmlpp.tar.gz I am using my library to transmit data over a tcp stream (wrapped in an std::istream and an std::ostream), load and store measurement data and for handling configuration data in xml-files. I wrote a class generator which generates derived xml element nodes. The generator itself uses the library, and generates it's own source code ;-) I started developing an xml-library for c++ because the existing libraries did not fit my taste. I think they are written for other languages than c++: DOM and SAX are good and nice for java and .net applications. Libxml is to big, and TinyXml supports only the DOM interface... When I use xml, I can ensure that everything is coded in UTF-8, so it would be possible to work with char based std::streams and std::strings, and if the file would be coded in "real Unicode", there would be the possibility to use the wchar based classes. My design of the library has 3 different layers: The requirements for the fist (tag based) layer were (demo1): - Compatibility with std::istream and std::ostream - Extremely lightweight, not a huge xml framework... The requirements for the second layer were (demo2): - Access to an element tree, which may contain a whole xml document or a part of it. - The parser can load the whole document, or a single element with or without it's contents. The requirement for the third layer were (demo3 and xclassgen): - Access to the elements of the tree by derived classes which can be automatically generated by an xml:schema definition file. The current limitations of the library are: - no encoding support, but UTF-8 can be handled with std::string - no namespaces, but it should be possible to change this... - the automatic generation of the derived classes needs at the moment a special xml definition file, it does not work with the xml:schema file Loading an xml document is always done by a pull parser based on an std::istream, pushing will be handled by using a thread wrapped around the pull parser (so there is no need to use an self made stack....) std::ifstream in("test.xml"); xml::ixmlstream xin(in); while(true) { xml::node n = xin.getNextNode(); if (n==0) break; handle(n); delete n; } Regards, Nils