XML parsing memory overhead concerns

Paul Miller stele at fxtech.com
Sat Dec 18 13:01:36 GMT 1999

> When I get to the handler, I'd like to write this:
> void PointHandler(XML::Element &elem, Point *point)
> {
>         // "pull" a chunk of element data, but it'll automatically
>         // stop when it gets to the end of the element (it stops
>         // when it sees </Point>)
>         char buf[40];
>         elem.GetData(buf, sizeof(buf));
>         sscanf(buf, "%dx%d", &point->x, &point->y);
> }
> For some reason I couldn't figure out how to make this work, because
> with expat I might have hit the element but not necessary gotten to the
> character data handler.

I remembered why I couldn't get this part to work. Suppose (using expat)
I get to the <Point> element. So far I can build the tree down to this
point, so when I see <Point> I look in the handler list for that subtree
and call the callback for the Point element. Now in PointHandler, the
code wants to pull the element data. I can't go back into expat and
parse some more at this point, getting called back with expat's
CharacterData handler, fill my buffer, and fall back out to

But this brings up a question: does expat buffer the entire character
data itself? If it does, perhaps I could delay the call to PointHandler
until after the expat character data handler has been called. I can save
a copy of that pointer away in my Element list, and only call the user
code when I see the end element tag.

Does this sound workable?

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