A validação de um ENORME arquivo XML
-
09-06-2019 - |
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.
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