Pergunta

Eu estou tentando encontrar uma forma de validar um grande arquivo XML contra um XSD.Eu vi a pergunta ...a melhor forma de validar um XML... mas as respostas de todos os apontado usando a biblioteca Xerces para validação.O único problema é que, quando eu uso a biblioteca para validar a 180 MB de arquivo, em seguida, recebo uma OutOfMemoryException.

Existem outras ferramentas,bibliotecas, estratégias para a validação de um maior do que o normal arquivo XML?

EDITAR:O SAX solução funcionou para java validação, mas as outras duas sugestões para o libxml ferramenta foi muito útil, bem como para validação de fora de java.

Foi útil?

Solução

Em vez de usar um DOMParser, use um SAXParser.Este lê a partir de um stream de entrada ou leitor, assim você pode manter o XML no disco em vez de carregar tudo na memória.

SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);

SAXParser parser = factory.newSAXParser();

XMLReader reader = parser.getXMLReader();
reader.setErrorHandler(new SimpleErrorHandler());
reader.parse(new InputSource(new FileReader ("document.xml")));

Outras dicas

Utilização libxml, que executa a validação e tem um modo streaming.

Pessoalmente, eu gosto de usar XMLStarlet que tem uma interface de linha de comando, e funciona em fluxos.É um conjunto de ferramentas integradas em Libxml2.

SAX e libXML vai ajudar, como já mencionado.Você pode também tentar aumentar o tamanho máximo de pilha para a JVM usando o -Xmx opção.E. g.para definir o tamanho máximo de pilha para 512MB: java -Xmx512m com.foo.MyClass

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top