OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   Re: nestable C/C++ parser

[ Lists Home | Date Index | Thread Index ]
  • From: Allan Kelly 59048 <allan.kelly@reuters.com>
  • To: xml-dev@ic.ac.uk
  • Date: Fri, 10 Dec 1999 13:38:21 +0000 (GMT)

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@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)

-----------------------------------------------------------------
        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@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)






 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS