[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: RFC: "even simpler" C++ XML parser for object hierarchies
> 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@f... xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev@i... Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1 To unsubscribe, mailto:majordomo@i... the following message; unsubscribe xml-dev To subscribe to the digests, mailto:majordomo@i... the following message; subscribe xml-dev-digest List coordinator, Henry Rzepa (mailto:rzepa@i...)
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|