4
respostas

Dúvida no Ex. 4 da Aula 3 - Trabalhando com eventos e Sax

Bom Dia Pessoal:

Uma dúvida na questão de trabalhar com SAX no java. Quando trabalhamos com DOM conseguimos fazer a validação do XML atraves do setValidating, setNamespaceAware e setAttribute. No caso do SAX não tem como fazer ?

Grato ...

4 respostas

William, a classe javax.xml.parsers.SAXParserFactory que cria a instância do parser do SAX possui os mesmos métodos serValidating e setNamespaceAware. Com ambos setados como true ele já não efetua a validação?

Boa tarde William Sauim Campana, o código abaixo permite você validar um XML pelo XSD. Se o XML não estiver de acordo com o XSD, uma exception é lançada.

Att,

import java.io.IOException;

import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.xml.sax.SAXException;

public class ValidaXML {

    public static void main(String[] args) throws SAXException, IOException {
        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = factory.newSchema(ValidaXML.class.getClassLoader().getResource("formatoVenda.xsd"));
        Validator validator = schema.newValidator();
        validator.validate(new StreamSource(ValidaXML.class.getClassLoader().getResourceAsStream("venda.xml")));
    }
}

Olá Willian, na minha opinião, sobre a sua questão é que não faz muito sentido você ter um validador para seu xml. Veja bem, você falará para seu handler qual node ele terá que ler e considerar para montar um elemento.... Seguindo os exemplos do capítulo, perceba que ele ignora o node de forma de pagamento.

Boa noite,

@Mateus, o problema é que o código poderia ser executado em sua grande parte até cair em alguma tag errada.

Creio que o método que o @Leandro colocou, valide antes de efetivamente começarmos a "trabalhar" com o XML.

Obrigado