Evento "characters" do SAX

0 respostas
R

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.<em>;

import org.xml.sax.helpers.</em>;

import <a href="http://java.io">java.io</a>.*;

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

Criado 31 de outubro de 2004
Respostas 0
Participantes 1