OK. It took bit to understand what you were saying but it works for me! Thanks for the idea.
Just to clarify: public class DocumentParser extends DefaultHandler { ContentHandler childCH = null; startElement( String uri, String localName, String qName, Attributes attributes) { if (childCH != null) { childCH.startElement( uri, localName, qName, attributes); return; } if (qName.equals("subStructure") { childCH = subStructureContentHandler; childCH.startElenent(uri, localName, qName, attributes); return; } if ( ... } characters( char[] ch, int start, int length) { if (childCH != null) { childCH.characters( ch, start, length); return; } charArrayBuffer.write(ch, start, length); } endElement( String uri, String localName, String qName) { if ( childCH != null) { childCH.endElement( uri, localName,qName,); if (childCH.isDone()) { childCH= null; doSomething with the populated substructure; return; } } if ( ... } } -----Original Message----- From: Nikhil Dinesh [mailto:[EMAIL PROTECTED] Sent: Thursday, September 16, 2004 4:39 PM To: [EMAIL PROTECTED]; [EMAIL PROTECTED] Subject: Re: parsing complex objects using Java SAX > I have data stream that contains complex objects (call this CO1). The object > contains sub-structures (call this SS1) that are used by other complex > objects (CO2). Furthermore the sub-structures themselves may at times be > standalone objects. > > I would like to write a content handler that can process the sub-structures > when they are standalone. I would like to reuse the sub-structures content > handler when processing to more complex object from its content handler. > > The examples I have seen chain the XMLReaders content handler for CO1 to use > the content handler for SS1 at the startElement() method. So far so good! > But the ugly stuff occurs in the content handler for the sub-structure SS1. > The SS1 content handler endElement() method needs to know its parent wrapper > ends. At that point the XMLReader content handler is returned to the parent > object. > This is not entirely true. The SAX events will always flow through the parent ContentHandler. It is up to the parent to decide whether to pass it on or not. For example when the first startElement is received, subsequent startElements with no endElements should be passed on to or used to create the child. When all these have received endElements(which are passed on) and a further endElement is received the parent knows its content has ended and that the parent's parent will not pass it any more events. Events in between can be passed on to the child. In other words the ContentHandlers themselves can be organized in a treelike structure with events flowing down a path in the tree and being absorbed by the node it is intended for. One way to accomplish this is by having your Objects implement ContentHandler so reuse can happen. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]