Criei uma classe simples para pasear um arquivo XML. Ela abre e trata o arquivo, consegue invocar os métodos startDocumento, endElement e endDocument. Mas, por algum motivo que foge a minha compreensão, ele não invoca o método startElement. Alguém já passou por isso?
A seguir o código:
package Base;
import java.io.IOException;
import java.util.jar.Attributes;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
public class ProcessaXPDL {
private String Arquivo;
public ProcessaXPDL(String cArquivo)
{
Arquivo=cArquivo;
}
public void Processa() throws ParserConfigurationException, SAXException, IOException
{
//Apenas para Debug
System.out.println(Arquivo);
//Abre o arquivo
InputSource fArquivo=new InputSource(Arquivo);
//Instancia parser
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser p = spf.newSAXParser();
p.parse(fArquivo, new TrataXML());
}
}
class TrataXML extends DefaultHandler
{
//Tratando os possíveis erros
public void error (SAXParseException e)
{
System.out.println("Erro ao processoar o arquivo: "+e.getMessage());
}
public void warning (SAXParseException e)
{
System.out.println("Problemas ao processar o arquivo: "+e.getMessage());
}
public void fatalError (SAXParseException e)
{
System.out.println("Impossível processar o arquivo: "+e.getMessage());
System.out.println("Impossível continuar.");
System.exit(1);
}
//Início de documento
public void startDocument()
{
System.out.println("Iniciando o documento.");
}
//Início de elemento
public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException
{
System.out.println("Ok, iniciei um elemento.");
}
//Fim de um elemento
public void endElement(String uri, String localName, String tag)
{
System.out.println("Elemento finalizado.");
}
//Fim do documento
public void endDocument()
{
System.out.println("Finalizando o documento.");
}
}