1
resposta

Erro: cvc-elt.1: Não pode localizar a declaração do elemento 'venda'.

Olá a todos!

Recebo as seguintes mensagens ao executar aplicação após as configurações de validação do XML:

Advertência: A validação foi ativada, mas um org.xml.sax.ErrorHandler não foi definido, provavelmente porque não era necessário. O parser usará um ErrorHandler padrão para imprimir os primeiros 0 erros. Chame o método 'setErrorHandler' para corrigir o problema.
Error: URI=file:///home/junior/eclipse-workspace/curso-alura-xml/src/vendas.xml Line=4: cvc-elt.1: Não pode localizar a declaração do elemento 'venda'.
real

vendas.xml

<?xml version="1.0" encoding="UTF-8"?>
<venda moeda="real"
    xsi:noNamespaceSchemaLocation="formatoVenda.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <formaDePagamento>Cartão</formaDePagamento>
</venda>
<!-- <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> -->

formatoVenda.xsd

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="venda">
        <complexType>
            <sequence>
                <element name="formaDePagamento" type="string" />
            </sequence>
            <attribute name="moeda" type="string" />
        </complexType>
    </element>
</schema>

Não consegui identificar o está ocasionando o erro =(

Poderia me ajudar, por favor?

1 resposta

Olá José, tudo bem contigo?

Peço desculpas desde já pela demora em obter um retorno!

Pelo que pude analisar, o erro "cvc-elt.1: Não pode localizar a declaração do elemento 'venda'" ocorre quando o parser não consegue encontrar a declaração do elemento 'venda' no arquivo XML. Isso pode acontecer quando o XML não está seguindo a estrutura definida pelo arquivo XSD.

No seu caso, o problema está na declaração do namespace no elemento 'venda' do arquivo XML. O atributo 'xsi:noNamespaceSchemaLocation' deve ser declarado antes dos outros atributos.

Para corrigir o erro, basta alterar o arquivo vendas.xml para que a declaração do namespace fique antes do atributo 'moeda'. Ficando assim:

<?xml version="1.0" encoding="UTF-8"?>
<venda xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="formatoVenda.xsd"
    moeda="real">
    <formaDePagamento>Cartão</formaDePagamento>
</venda>

Dessa forma, o parser conseguirá encontrar a declaração do elemento 'venda' no arquivo XSD e o erro não será mais apresentado.

Espero ter ajudado e bons estudos!