UTILIDADE
Eis a seguir um código super simples para validar um arquivo XML qualquer a partir de um modelo XSD.
O código não lista todas as falhas de uma vez. Ele finaliza logo na primeira falha encontrada para um arquivo não válido (' is NOT valid'). Assim você precisa corrigir esta primeira falha no XML e então rodar o código novamente para poder verificar a próxima falha do XML.
Caso nenhuma falha seja encontrada, ou todas já tenham sido corrigidas, é impresso ' is valid'.
No exemplo abaixo está sendo utilizado o endereço web do modelo hospitalar de XML no padrão TISS 3.0.2 definido pela ANS.
COMO FAZER
Basta salvar o código a seguir um arquivo de teste groovy "ValidarXmlComXsdTests.groovy"; atualizar o endereço do seu arquivo XML a ser validado e do arquivo XSD que será utilizado para a validação; mandar rodar o teste e verificar o retorno.
OBSERVAÇÃO
Algumas vezes precisei revezar o uso das "OPÇÃO 1 DE 2" e "OPÇÃO 2 DE 2" para conseguir executar a validação adequadamente, pois algumas definições de dados falharam em serem carregadas tanto localmente quanto da internet, e o uso revezado sempre que uma delas falhava resolveu para o meu caso.
CÓDIGO
import org.xml.sax.SAXException
import javax.xml.XMLConstants
import javax.xml.transform.Source
import javax.xml.transform.stream.StreamSource
import javax.xml.validation.Schema
import javax.xml.validation.SchemaFactory
import javax.xml.validation.Validator
class ValidarXmlComXsdTests extends GroovyTestCase {
void testValidarXmlComXsd() {
// URL schemaFile = new URL("http://www.ans.gov.br/padroes/tiss/schemas/tissV3_02_00.xsd") // OPÇÃO 1 DE 2
File schemaFile = new File('/home/usuario/Downloads/todosArquivosDaPastaSchemasDoLinkSuperior/tissV3_02_00.xsd') // OPÇÃO 2 DE 2
Source xmlFile = new StreamSource(new File('/home/usuario/Downloads/arquivoXmlParaSerValidado.xml'))
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
Schema schema = schemaFactory.newSchema(schemaFile)
Validator validator = schema.newValidator()
try {
validator.validate(xmlFile)
println xmlFile.getSystemId() + ' is valid'
} catch (SAXException e) {
println xmlFile.getSystemId() + ' is NOT valid'
println 'Reason: ' + e.getLocalizedMessage()
}
}
}
Fonte: http://stackoverflow.com/questions/15732/whats-the-best-way-to-validate-an-xml-file-against-an-xsd-file Show archive.org snapshot