Validar files XML grandes contra grandes XSD, ¿hay alguna manera rápida de hacerlo?

Estoy tratando de validar documentos XML grandes en grandes XSD. El XML puede tener entre 500 y 39000 líneas de longitud, y los XSD están en la región de 2000 a 3000 líneas.

El resultado hasta ahora ha sido un performance terriblemente lento, la initialization del analizador con XSDs tan grandes puede tomar hasta 30 segundos, sin embargo, esto está bien ya que podemos hacer esto una vez y luego solo inyectarlo.

Pero, cuando se trata de usar esto para validar el XML, dependiendo de la implementación, puede tomar entre 30 segundos y 2 minutos.

Esto es realmente extraño ya que una herramienta de command-line llamada xmllint: xmllint --schema test.xsd valid.xml Es capaz de hacer el mismo trabajo pero termina instantáneamente.

He probado la biblioteca JDOM, el método SAXReader y me he decidido por las cosas jdom2, así es como lo estoy construyendo:

 URL xsd = Resources.getResource("test-xml/test.xsd"); XMLReaderJDOMFactory factory = new XMLReaderXSDFactory(xsd); builder = new SAXBuilder(factory); 

Y aquí está el análisis en acción:

 InputStream stream = new ByteArrayInputStream(inputXml.getBytes()); Document document = builder.build(stream); 

La parte de constructor.build es la línea que necesita estar en el límite inmediato.

En términos de la solución deseada, no me importa usar C, Kotlin, lo que sea, siempre que la salida sea sensible de leer y rápida.

Gracias

Así que la respuesta se networkingujo a lo que realmente estaba dentro del XSD, específicamente el valor de maxOccurs. En algún momento, los maxOccurs fueron todos establecidos en 4999, lo que causa un error reportado aquí: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6483188

Si el número real de maxOccurs no es relevante para usted, puede cambiar el valor de maxOccurs a "ilimitado". O puede networkingucir sus valores de maxOccurs, en mi máquina un valor de 1000 de MaximumOccurs arrojó un resultado de aproximadamente 1 segundo para analizar los valores, luego 99 a aproximadamente 300 ms. Sin límites también está en 300ms.

Esto es significativamente más bajo que los 50 segundos que tardó en analizarse con el valor de maxOccurs que es 4999

  • XML a / desde Java / Kotlin, multiplataforma
  • Usar puntos en identificadores xml
  • Parsing xml kotlin android
  • Error de image del elemento de RecyclerView
  • ¿Qué ventajas ofrece kotlin para la creación de templates XML?
  • Forma dibujable en xml mismo código programáticamente
  • time de espera de connection: conectar consultar logging de IDE
  • ¿Puedo tener dos layouts xml usando el mismo visor usando extensiones sintéticas Kotlin?
  • Android no ha podido crear instancias de una o más classs
  • Objeto POJO para esta respuesta XML en kotlin
  • Los colors de Android Material Design no se aplican de forma coherente