Convalida di un ENORME file XML
-
09-06-2019 - |
Domanda
Sto cercando di trovare un modo per convalidare un file XML di grandi dimensioni rispetto a un XSD.Ho visto la domanda ...il modo migliore per convalidare un XML... ma tutte le risposte indicavano l'utilizzo della libreria Xerces per la convalida.L'unico problema è che quando utilizzo quella libreria per convalidare un file da 180 MB, ottengo un'eccezione OutOfMemoryException.
Esistono altri strumenti, librerie, strategie per convalidare un file XML più grande del normale?
MODIFICARE:La soluzione SAX ha funzionato per la convalida Java, ma gli altri due suggerimenti per lo strumento libxml sono stati molto utili anche per la convalida al di fuori di Java.
Soluzione
Invece di usare un DOMParser, usa un SAXParser.Questo legge da un flusso di input o da un lettore in modo da poter mantenere l'XML su disco invece di caricarlo tutto in memoria.
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")));
Altri suggerimenti
Utilizzo libxml, che esegue la convalida E ha una modalità di streaming.
Personalmente mi piace usare XMLStarlet che ha un'interfaccia a riga di comando e funziona sui flussi.È un insieme di strumenti basati su Libxml2.
SAX e libXML aiuteranno, come già accennato.Potresti anche provare ad aumentare la dimensione massima dell'heap per la JVM utilizzando l'opzione -Xmx.Per esempio.per impostare la dimensione massima dell'heap su 512 MB: java -Xmx512m com.foo.MyClass