Durante a aula eu vi que meu código não estava de acordo ao vídeo, busquei nas aulas a frente e copiei tudo para ter certeza que não era erro de nomenclatura.
Quando eu rodo o programa ao inves de acusar da tag errada errado "nomes" ele acusa "NullPointerException" e se eu tiro os elementos de produto ele imprime produto ao invés de não aparecer nada.
o que eu estou fazendo de errado?
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
factory.setValidating(true);
factory.setNamespaceAware(true);
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
Document document = builder.parse("src/venda.xml");
Element tagFormaDePagamento = (Element) document.getElementsByTagName("formaDePagamento").item(0);
String formaDePagamento = tagFormaDePagamento.getTextContent();
System.out.println(formaDePagamento);
String moeda = document.getDocumentElement().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());
Produto prod = new Produto(nome, preco);
System.out.println(prod);
}
}
formatoVenda.xsd
<?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>
venda.xml
<?xml version="1.0" ?>
<venda moeda="real" xsi:noNamespaceSchemaLocation="formatoVenda.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<formaDePagamento>Cartao</formaDePagamento>
<produtos>
<produto>
<nomes>Livro da casa do código</nomes>
<preco>59.90</preco>
</produto>
<produto>
<nome>Livro de java</nome>
<preco>59.90</preco>
</produto>
</produtos>
</venda>