Na validação, ele não associa o xsd ao xml.
Segue xml:
<?xml version="1.0" ?>
<venda moeda="real" xsd:noNamespaceSchemaLocation="venda.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance">
<formaDePagamento>Cartao</formaDePagamento>
<produtos>
<produto>
<nome>Livro da casa do código</nome>
<preco>59.90</preco>
</produto>
<produto>
<nome>Livro de java</nome>
<preco>59.90</preco>
</produto>
</produtos>
</venda>
Segue 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>
Segue erro, notar que a URI está nula:
Error: URI=null Line=3: cvc-elt.1: Não pode localizar a declaração do elemento 'venda'.
Segue código:
package br.com.alura.sistema;
import java.io.FileInputStream;
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;
public class Leitor {
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 documento = builder.parse(new FileInputStream("src/venda.xml"));
// 2
Element venda = documento.getDocumentElement();
System.out.println(venda.getAttribute("moeda"));
// 1
Element formaDePagamento = (Element) documento.getElementsByTagName("formaDePagamento").item(0);
System.out.println(formaDePagamento.getTextContent());
// 3
NodeList produtos = venda.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();
Produto prod = new Produto(nome, Double.parseDouble(preco));
System.out.println("-----------");
System.out.println(prod);
System.out.println("-----------");
}
}
}