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.
Thoughts?
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"));
layer->Parse(*it);
doc->AddLayer(layer);
}
AddDocument(doc);
return doc;
}
void Layer::Parse(XML::Element &elem)
{
// look for (required) size element
mSize.Parse(elem.GetElement("size"));
// look for object elements
XML::Element::iterator it;
for (it = elem.begin("Object"); it != elem.end(); ++it)
{
Object *obj = ObjectFactory::Create((*it).GetAttribute("type"));
obj->Parse(*it);
AddObject(obj);
}
}
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