31 votes

Validation d'un FICHIER XML ÉNORME

Je cherche un moyen de valider un grand fichier XML contre un XSD. J'ai vu la question ...meilleure façon de valider un XML... mais toutes les réponses pointaient vers 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, je reçois une OutOfMemoryException.

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

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

30voto

jodonnell Points 14999

Au lieu d'utiliser un DOMParser, utilisez un SAXParser. Cela lit à partir d'un flux d'entrée ou d'un lecteur afin de pouvoir conserver le XML sur le disque au lieu de le charger entièrement 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")));

8voto

John Millikin Points 86775

Utilisez libxml, qui effectue la validation et dispose d'un mode de streaming.

3voto

dlamblin Points 14546

Personnellement, j'aime utiliser XMLStarlet qui dispose d'une interface en ligne de commande et fonctionne sur des flux. Il s'agit d'un ensemble d'outils construit sur Libxml2.

1voto

GaZ Points 1054

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X