2
respostas

XML - Sax

Alguém consegue explicar melhor como funciona este código? A aula e o javadoc me são um tanto vagos na explicação dos métodos, principalmente o método "characters" que realmente não entendi.

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class ProdutosHandler extends DefaultHandler {

    private StringBuilder conteudo;
    private Produto produto;
    private List<Produto> produtos = new ArrayList<>();

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        System.out.println(qName);
        if(qName.equals("produto")) {
            produto = new Produto();

        }

        conteudo = new StringBuilder();

    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        conteudo.append(new String(ch,start,length));
        System.out.println(start);
    }


    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        if(qName.equals("produto")) {
            produtos.add(produto);
        }else if (qName.equals("nome")) {
            produto.nome = conteudo.toString();
        }else if (qName.equals("preco")) {
            produto.preco = Double.parseDouble(conteudo.toString());
        }
    }

    public List<Produto> getProdutos() {
        return produtos;
    }    
}
2 respostas

O método characters recebe o conteúdo de cada uma das tags.. perceba que no endElement ele faz o if de qual tag ta sendo fechada e recupera o valor da variável conteudo, associando com a informação específica do produto.

É que quando eu escrevo um System.out.println(ch) no método ele printa o xml inteiro.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software