RFC: "even simpler" C++ XML parser for object hierarchies

Paul Miller stele at fxtech.com
Wed Dec 8 15:23:44 GMT 1999

> Is holding the document in memory not an option?  Because if you can hold
> it all in memory, it's simple enough to build a tree representation of the
> thing, then walk the tree with your handlers, then throw away the tree.

I started thinking about this some more. If I could build a light-weight
in-memory representation of the XML file, then I could build an "even
simpler" DOM-like interface as an option. So if you didn't want to use
the callback-based "discovery" API that I outlined previously, you can
use an alternative iterator-based API that lets you avoid the callbacks
and just iterate over elements you are interested in.

Here is my previous code, rewritten for a similar iterator-based API. As
you can see, it avoids the static callback functions and a lot of the
extra boiler-plate code, but the API is very similar.


Document *App::LoadDocument(const char *path)
	XML::Input file(path);
	XML::Element elem = file.GetElement("Document");
	Document *doc = new Document(elem.GetAttribute("name"));
	// now iterate over 'Layer' elements
	XML::Element::iterator it;
	for (it = elem.begin("Layer"); it != elem.end(); ++it)
		Layer *layer = new Layer((*it).GetAttribute("name"));
	return doc;

void Layer::Parse(XML::Element &elem)
	// look for (required) size element
	// look for object elements
	XML::Element::iterator it;
	for (it = elem.begin("Object"); it != elem.end(); ++it)
		Object *obj = ObjectFactory::Create((*it).GetAttribute("type"));

void Size::Parse(XML::Element &elem)
	sscanf(elem.GetData(), "%dx%d", &width, &height);

Paul Miller - stele at fxtech.com

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
To unsubscribe, mailto:majordomo at ic.ac.uk the following message;
unsubscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)

More information about the Xml-dev mailing list