Question

J'essaie de trouver un moyen de valider un gros fichier XML par rapport à un XSD.j'ai vu la question ...meilleure façon de valider un XML... mais les réponses indiquaient toutes l'utilisation de la bibliothèque Xerces pour la validation.Le seul problème est que lorsque j'utilise cette bibliothèque pour valider un fichier de 180 Mo, j'obtiens une exception OutOfMemoryException.

Existe-t-il d'autres outils, bibliothèques, stratégies pour valider un fichier XML plus volumineux que la normale ?

MODIFIER:La solution SAX a fonctionné pour la validation Java, mais les deux autres suggestions pour l'outil libxml ont également été très utiles pour la validation en dehors de Java.

Était-ce utile?

La solution

Au lieu d'utiliser un DOMParser, utilisez un SAXParser.Cela lit à partir d'un flux d'entrée ou d'un lecteur afin que vous puissiez conserver le XML sur le disque au lieu de tout charger en mémoire.

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

Autres conseils

Utiliser libxml, qui effectue la validation et a un mode streaming.

Personnellement, j'aime utiliser XMLStarlet qui possède une interface de ligne de commande et fonctionne sur les flux.Il s'agit d'un ensemble d'outils construits sur Libxml2.

SAX et libXML vous aideront, comme déjà mentionné.Vous pouvez également essayer d'augmenter la taille maximale du tas pour la JVM à l'aide de l'option -Xmx.Par exemple.pour définir la taille maximale du tas à 512 Mo : java -Xmx512m com.foo.MyClass

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top