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 + "</" + localName + ">";
}
}
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