Frage

Ich versuche eine Möglichkeit zu finden, eine große XML-Datei anhand einer XSD zu validieren.Ich habe die Frage gesehen ...der beste Weg, ein XML zu validieren... aber alle Antworten deuteten darauf hin, dass die Xerces-Bibliothek zur Validierung verwendet werden sollte.Das einzige Problem besteht darin, dass ich eine OutOfMemoryException erhalte, wenn ich diese Bibliothek zum Validieren einer 180-MB-Datei verwende.

Gibt es andere Tools, Bibliotheken und Strategien zur Validierung einer XML-Datei, die größer als normal ist?

BEARBEITEN:Die SAX-Lösung funktionierte für die Java-Validierung, aber die beiden anderen Vorschläge für das libxml-Tool waren auch für die Validierung außerhalb von Java sehr hilfreich.

War es hilfreich?

Lösung

Verwenden Sie anstelle eines DOMParser einen SAXParser.Dies liest aus einem Eingabestream oder Reader, sodass Sie das XML auf der Festplatte behalten können, anstatt alles in den Speicher zu laden.

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")));

Andere Tipps

Verwenden libxml, das die Validierung durchführt Und verfügt über einen Streaming-Modus.

Persönlich benutze ich es gerne XMLStarlet das über eine Befehlszeilenschnittstelle verfügt und mit Streams funktioniert.Es handelt sich um eine Reihe von Tools, die auf Libxml2 basieren.

SAX und libXML helfen, wie bereits erwähnt.Sie können auch versuchen, die maximale Heap-Größe für die JVM mithilfe der Option -Xmx zu erhöhen.Z.B.So legen Sie die maximale Heap-Größe auf 512 MB fest: java -Xmx512m com.foo.MyClass

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top