Why not just a Element.addText(String) that either adds a new text node or merges with a adjacent one if one exists? I don't think a recursive merge method would be that useful since SAXHandler already does it in the characters() method.