nestable C/C++ parser

Allan Kelly 59048 allan.kelly at reuters.com
Fri Dec 10 13:38:27 GMT 1999


I find this debate quiet interesting and would like to share my experience,
maybe this should in the a "object serialisation thread" but here goes....

I've got some code (sorry, company's not mine, can't publish) which started
life a generic container, when we came to serialise the container XML was the
obvious candidate, because, as has been said before why invent a news format?

Anyway, what we've currently got I refer to as XML-like because
- I'm not confident of my DTD writing
- Each serialisation forms a message, the message is really an XML-fragment so
is missing pre-log and post-log
- root elements must have an attribute "name"

I have a plugable factory class.  Each object knows how to stream itself in and
out.  The input stream is pipped into the factory, as long as the
messages/XML-fragments are for classes which have been plugged into the factory
everything is fine, the factory produces a container which holds items from the
stream and can be accessed using operator[]

This works quiet well for passing messages between co-operating processes.

The code is actually quiet small and efficient.  Which makes me wonder why I
need to bother with expat, SAX and DOM?  The short answer is I don't because we
have a tailored solution to our problem.

Allan

>> I think your original request got lost in a side track.  If is very possible
>> to do what you want with expat.  The trick is the use of the XML_SetUserData
>> and the userdata argument.  Basically, the trick is to create a base class
>> that has methods that you want to change the behavior of (typically,
>> StartElement and EndElement).  Create derived classes for each different
>> behavior that you want.  Call XML_SetUserData to the initial handler object.
>> In your StartElement callback, cast the userdata argument up to a pointer to
>> your base class and call its startElement virtual method.  If you want to
>> change the handler, make another call to XML_SetUserData.
>
>The problem here is it requires 3 callbacks to parse a single element
>and restore the state. I'd like a cleaner solution.
>
>--
>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)

-----------------------------------------------------------------
        Visit our Internet site at http://www.reuters.com

Any views expressed in this message are those of  the  individual
sender,  except  where  the sender specifically states them to be
the views of Reuters Ltd.

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