Não está me retornando nem um erro de validação de xml , o erro que ele retorna é um null exeption no main. Classe Principal
package br.com.alura.Teste;
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;
import br.com.alura.Model.Produto;
public class Sistema {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory fabrica = DocumentBuilderFactory.newInstance();
fabrica.setValidating(true);
fabrica.setNamespaceAware(true);
fabrica.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage","http://www.w3.org/2001/XMLSchema" );
DocumentBuilder builder = fabrica.newDocumentBuilder();
Document document = builder.parse("src/vendas.xml");
Element venda = document.getDocumentElement();
String moeda = venda.getAttribute("moeda");
System.out.println(moeda);
NodeList produtos = document.getElementsByTagName("nome");
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());
Produto prod = new Produto(nome,preco);
System.out.println(prod);
}
}
}
error
real
Exception in thread "main" java.lang.NullPointerException
at br.com.alura.Teste.Sistema.main(Sistema.java:28)
vendas.xml
<?xml version="1.0" encoding="UTF-8"?>
<venda moeda="real" xsd:noNamespaceSchemaLocation="formatoVenda.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">
<formaDePagamento>Débito</formaDePagamento>
<produtos>
<produto>
<nome>JAVA</nome>
<preco>29.10</preco>
</produto>
<produto>
<nome>XML</nome>
<preco>24.10</preco>
</produto>
</produtos>
</venda>
formatoVenda.xml
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="produto">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nome" type="xsd:string" />
<xsd:element name="preco" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="venda">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="formaDePagamento" type="xsd:string" />
<xsd:element name="produtos">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref = "produto" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="moeda" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>