hi tony, AFAIR all that recording functionality you need exists in AbstractSAXTransformer. so, slightly modified, that pseudocode should do it.
> -----Ursprungliche Nachricht----- > Von: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] Auftrag > von Tony Collen > Gesendet: Mittwoch, 19. Mai 2004 23:06 > An: [EMAIL PROTECTED] > Betreff: Custom Transformers > > > Hey everybody, > > I'm about to dive in and finally write a custom transformer. > > My use case is this: I am going to look for a certain element in > the stream with a specific > namespace, and when I see it, I need to get all the character > content (i.e. everything that > characters() would return), manually process it and reformat it, > and then place it back into the SAX > stream. > > Looking at the ContentHandler API, it says that some > implementations might chunk the data coming to > me in characters(), which complicates things, since I might not > get the entire data, which I need to > be able to process in one piece. > > Poking around, I found the TextRecorder in > org.apache.cocoon.transformation.helpers, which seems to > be what I need. > > So now I ask if this seems right, in presented in glorious pseudocode: > > ==== > recording = false > TextRecorder recorder = new TextRecorder(); > > void startElement(ns, localname, qname, attrs) { > > if (ns.equals(myNs) && localname.equals(myElemName)) { > this.recording = true; > } > > super.startElement(ns, localname, qname, attrs); > } > > void endElement(ns, localname, qname, attrs) { > > if (ns.equals(myNs) && localname.equals(myElemName)) { > // have we seen our element? > > this.recording = false > String theText = process(this.recorder.getText()); > super.characters(theText.toCharArray(), 0, theText.length()); > } > super.endElement(ns, localname, qname, attrs) > } > > void characters(char buf[], int start, int len) { > > if (this.recording) { > this.recorder.characters(buf, start, len); > } else { > super.characters(buf, start, len); > } > } > > String process(String myStr) { > // process the string arbitrarily > } > > ==== > Regards, > > Tony >
