Pregunta

Estoy tratando de encontrar una manera de validar un archivo XML grande con un XSD.vi la pregunta ...la mejor manera de validar un XML... pero todas las respuestas apuntaban al uso de la biblioteca Xerces para la validación.El único problema es que cuando uso esa biblioteca para validar un archivo de 180 MB, obtengo una OutOfMemoryException.

¿Existen otras herramientas, bibliotecas o estrategias para validar un archivo XML más grande de lo normal?

EDITAR:La solución SAX funcionó para la validación de Java, pero las otras dos sugerencias para la herramienta libxml también fueron muy útiles para la validación fuera de Java.

¿Fue útil?

Solución

En lugar de utilizar DOMParser, utilice SAXParser.Esto lee desde un flujo de entrada o lector para que pueda mantener el XML en el disco en lugar de cargarlo todo en la 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")));

Otros consejos

Usar libxml, que realiza la validación y Tiene un modo de transmisión.

Personalmente me gusta usar XMLStarlet que tiene una interfaz de línea de comandos y funciona en transmisiones.Es un conjunto de herramientas construidas sobre Libxml2.

SAX y libXML ayudarán, como ya se mencionó.También puede intentar aumentar el tamaño máximo del montón para la JVM usando la opción -Xmx.P.ej.para establecer el tamaño máximo del montón en 512 MB: java -Xmx512m com.foo.MyClass

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top