Evento "characters" do SAX

Estou tentando ler um arquivo XML e pegar todo o conteúdo entre duas tags, por exemplo, digamos que o arquivo XML seja o seguinte:
<pessoa>
<nome>fulano</nome>
<idade>22</idade>
</pessoa>

Eu estou tentando pegar todo conteúdo entre a tag “pessoa”, todo mesmo, tanto as tags como seus conteúdos, ou seja, quero pegar:

<nome>fulano</nome>
<idade>22</idade>

não encontrei um método no DOM nem no SAX que faça isso, por isso resolvi eu mesmo montar o XML que quero usando o SAX. o meu código ficou assim:
import org.xml.sax.;
import org.xml.sax.helpers.
;
import java.io.*;

public class Example2 extends DefaultHandler {

// Local variables to store data
// found in the XML document
public boolean pessoa = false;
public String xml = “”;

// Buffer for collecting data from // the “characters” SAX event.
private CharArrayWriter contents = new CharArrayWriter();

// Override methods of the DefaultHandler class
// to gain notification of SAX Events.
//
// See org.xml.sax.ContentHandler for all available events.
//

public void startElement( String namespaceURI,
String localName,
String qName,
Attributes attr ) throws SAXException {
if(pessoa){
xml = xml + “<” + localName + “>”;
}
if ( localName.equalsIgnoreCase( “pessoa” ) ) {
seguro=true;
}

  contents.reset();

}

public void endElement( String namespaceURI,
String localName,
String qName ) throws SAXException {

	if ( localName.equalsIgnoreCase( "pessoa" ) ) {
		seguro=false;
	}      	
	if(pessoa){
		
		xml = xml + "&lt;/" + localName + "&gt;";
		
	}

}

public void characters( char[] ch, int start, int length )
throws SAXException {

  contents.write( ch, start, length );
  if(pessoa){
		  xml = xml + contents.toString();
	  }

}

public static void main( String[] argv ){

  try {

     // Create SAX 2 parser...
     XMLReader xr = XMLReaderFactory.createXMLReader();

     // Set the ContentHandler...
     Example2 ex2 = new Example2();
     xr.setContentHandler( ex2 );

     // Parse the file...
     xr.parse( new InputSource(
           new FileReader( "Catalogo.xml" )) );

     // Say hello...
     System.out.println( ex2.xml);



  }catch ( Exception e )  {
     e.printStackTrace();
  }

}

}

O problema é que parece que o evento “characters” é chamado 3 vezes pois na hora que mando imprimir a variável string “xml” o conteúdo das tags aparecem 3 vezes, uma vez entre a tag (que é o certo, o que eu queria) e duas vezes fora das tags.

Se alguém souber como usar o evento “characters” direito, ou como seria a forma correta de fazer isso que eu quero, ou ainda souber se existe algum método do DOM ou do SAX que pegue o conteúdo da forma que preciso, serei muito grato!!!
Valeu demais!!!
Raul