Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Ajuda em código - Capítulo 01

Bom dia galera,tudo bem? Bom,comecei o curso de XML e me deparei com erros bem na primeira aula,ou seja,meu código corresponde a 100% o código dos exercícios porém há erro de compilação.

*meu XML(se chama vendas.xml):

<?xml version="1.0" encoding="UTF-8"?>
<venda>
    <formaDePagamento>Cartão</formaDePagamento>
    <produtos>
        <produto>
            <nome>Livro de xml</nome>
            <preco>29.90</preco>
        </produto>
        <produto>
            <nome>Livro de O.O Java</nome>
            <preco>29.90</preco>
        </produto>
    </produtos>
</venda>

*Minha classe principal:

public class Sistema {

    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse("src/venda.xml");

        NodeList produtos = document.getElementsByTagName("produto");

        for (int i = 0; i < produtos.getLength(); i++) {
            Element produto = (Element) produtos.item(i);
            String nome = produto.getElementsByTagName("nome").item(0).getTextContent();
            String preco = produto.getElementsByTagName("preco").item(0).getTextContent();

            System.out.println("-----------");
            System.out.println("Nome do produto: " + nome);
            System.out.println("Preco do produto: " + preco);
            System.out.println("-----------");
        }
    }

}

*Minha classe secundária:

public class Produto {

    private String nome;
    private double preco;

    public Produto(String nome, double preco) {
        this.nome = nome;
        this.preco = preco;
    }

    public String getNome() {
        return nome;
    }

    public double getPreco() {
        return preco;
    }

    @Override
    public String toString() {
        return "Nome:" + this.nome + "\n Preço:" + this.preco + "\n";
    }

}

Erros detectado pelo compilador:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Type mismatch: cannot convert from org.w3c.dom.Document to javax.swing.text.Document
    The method getElementsByTagName(String) is undefined for the type Document
    The method getElementsByTagName(String) is undefined for the type Element
    The method getElementsByTagName(String) is undefined for the type Element

    at br.com.alura.Teste.Sistema.main(Sistema.java:15)
3 respostas

*Edit Depois de ver mais uma vez os vídeos meu código principal mudou:


public class Sistema {

    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse("src/venda.xml");

        Element venda = document.getDocumentElement();
        String moeda = venda.getAttribute(moeda);
        System.out.println(moeda);
        NodeList produtos = document.getElementsByTagName("produto");

        for (int i = 0; i < produtos.getLength(); i++) {
            Element produto = (Element) produtos.item(i);
            String nome = produto.getElementsByTagName("nome").item(0).getTextContent();
            Double preco = Double.parseDouble(produto.getElementsByTagName("preco").item(0).getTextContent());
            Prroduto prod = new Produto(nome,preco);

            System.out.println(prod);
        }
    }

}

*Console:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Type mismatch: cannot convert from org.w3c.dom.Document to javax.swing.text.Document
    The method getDocumentElement() is undefined for the type Document
    The method getAttribute(String) is undefined for the type Element
    The method getElementsByTagName(String) is undefined for the type Document
    The method getElementsByTagName(String) is undefined for the type Element
    The method getElementsByTagName(String) is undefined for the type Element
    Prroduto cannot be resolved to a type
solução!

Oi Leonardo, tudo bem? Aparentemente seu erro acontece por causa de imports incorretos. Veja que o erro aponta um erro de conversão para o objeto da classe javax.swing.text.Document mas o Document utilizado é o do pacote org.w3c.dom.Document.

Tente rever os imports. O problema deve ser apenas esse.

Resolvido,os imports necessários são :

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

E essa parte estava incorreta também:

String moeda = venda.getAttribute(moeda);

pelo que li na documentação o método getAttribute me retornava uma String,então foi só passar ""