To produce reliable SAX output, ResultTreeHandler must pass startDocument() out. We *could* process startDocument() and then only generate a startDocument() if one wasn't passed in... but that may be more work than saying we will always generate it ourselves.
At this time, ResultTreeHandler is not always passed startDocument(), depending on the structure of the tree being passed into it. I believe we actually concluded that was unavoidable in the general case... but it's been a year and a half since I've looked at that issue. There may also be gratuitous asymmetries. OR stuff implied by lower-level routines that really wants to be left there. If someone has the cycles to investigate this, go for it. ______________________________________ Joe Kesselman / IBM Research
