[
Lists Home |
Date Index |
Thread Index
]
- From: Paul Miller <stele@fxtech.com>
- To: xml-dev <xml-dev@ic.ac.uk>
- Date: Wed, 08 Dec 1999 10:24:47 -0500
> 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@fxtech.com
xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev@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@ic.ac.uk the following message;
unsubscribe xml-dev
To subscribe to the digests, mailto:majordomo@ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa@ic.ac.uk)
|