Boa noite, estou seguindo o código passo a passo, mesmo assim um erro de compilação não permite eu seguir em frente.
Abaixo segue as classes Java e arquivos Xml e XSD.
Grato pela ajuda.
Estrutura dos arquivos
src/(default package) Principal.java src/(default package) Produto.java src/vendas.xml src/formatoVendas.xml
Erro do console
Exception in thread "main" org.xml.sax.SAXParseException; systemId: file:///C:/Users/Gilmar/Documents/workspace/XmlProject/src/vendas.xml; lineNumber: 2; columnNumber: 129; O prefixo "xsi" do atributo "xsi:noNamespaceSchemaLocation" associado a um tipo de elemento "venda" não está vinculado.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at Principal.main(Principal.java:24)
vendas.xml
Obs.: O eclipse informa um erro na linha 2
<?xml version="1.0" ?>
<venda moeda="real" xsi:noNamespaceSchemaLocation="formatoVendas.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>
formatoVendas.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>
Principal.java
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class Principal {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("src/vendas.xml");
NodeList produtos = doc.getElementsByTagName("produto");
Element element;
for (int i = 0; i < produtos.getLength(); i++) {
element = (Element) produtos.item(i);
Produto produto = new Produto(element.getElementsByTagName("nome").item(0).getTextContent(),
element.getElementsByTagName("preco").item(0).getTextContent());
System.out.println(produto);
}
}
}
Produto.java
public class Produto {
private String nome;
private String preco;
public Produto(String nome, String preco) {
this.nome = nome;
this.preco = preco;
}
public String getPreco() {
return preco;
}
public void setPreco(String preco) {
this.preco = preco;
}
@Override
public String toString() {
return "Nome: " + this.nome + " Preço: " + this.preco;
}
}