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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top