Validación de XMLSchema en Android

Mantengo el proyecto JDOM y estoy tratando de "certificarlo" en Android. La mayoría de las cosas funcionan bien, pero la validación de XML Schema está resultando problemática …

Mis preguntas son: ¿Existe una manera de validar XMLSchema en Android? Si hay, ¿cómo?

Se han hecho preguntas como esta antes, pero no se da una respuesta concluyente:

  • Validación de esquema de Android
  • Validación de esquemas XML en Android

Esto es lo que actualmente "sé" (corregirme si estoy equivocado) …:

  • SchemaFactory.newInstance (" http://www.w3.org/2001/XMLSchema ") – falla con IllegalArgumentException
  • El valor predeterminado 'ExpatParser' en Android del proyecto Harmony no admite la validación de XMLSchema.
  • Es posible cargar Xerces en una aplicación de Android, e incluso analizarla, pero no realizar un análisis de validación . Cuando intentas conseguir excepciones de 'FATAL' para Android que causan un fallo en la aplicación.

He estado trabajando en esto desde hace algún tiempo, y he reunido la siguiente "investigación":

  • JDOM2 y Android
  • JDOM2 – Android con Xerces

Si alguien tiene más información acerca de XMLSchema Validation en Android, agradecería enormemente cualquier entrada en absoluto.

Si alguien ha hecho XMLSchema validación en XML y puede ayudarme a obtener la funcionalidad de trabajo para JDOM obtendrán miles de puntos de Internet … 😉 y será inmortalizado en el código JDOM y enviar mensajes.

Me fascina que, después de varios años, este todavía sea un problema abierto. Sin embargo, sólo parece haber una mala noticia. De acuerdo con la validación de AOSP Issue Tracker Schema actualmente no parece compatible con las API estándar de Android y Google parece no estar dispuesto a solucionarlo:

Nuestras API XML (incluyendo SAX, XmlPull y DOM) no admiten ninguno de los siguientes:

XML Schema XML DTDs (including external entity declarations and references) validation element content whitespace 

Sin embargo, un comentarista de ese mismo ticket hace referencia a una solución y proporciona código de ejemplo utilizando un puerto Xerces. No sé si esto va más allá de lo que has descubierto, hasta ahora, pero espero que ayude.

Para resumir esto: El SchemaFactoryFinder sólo conoce las siguientes definiciones de esquema:

El uso de cualquier otra definición de esquema hace que falle (sin embargo, registrará esto en el nivel de depuración). Obviamente este es el caso para usted, ya que está utilizando otra referencia al esquema de 2011. Por lo tanto, la referencia "correcta" a la definición de esquema debería solucionar este problema.

Creo que podría usar RelaxNG – hay un montón de validadores disponibles. http://relaxng.org/#validators

De particular interés debe ser – http://www.kohsuke.org/relaxng/bali/doc/https://msv.java.net/http://www.davidashen.net/rnv.html

Este último es la implementación de C, los dos primeros están escritos en Java.

Si necesita alto rendimiento, puede escribir algunas funciones de código JNI y llamada en la fuente rnv. Un enfoque más simple sería construir sólo rnv para Android, utilizando NDK y luego llamar a su ejecutable con parámetros.

Algo como

 Process p = Runtime.exec("/path/to/rnv/exec", [valdidationDoc: String, some more params]); OutputStream out = p.getOutputStream(); // connected to STDIN of p InputStream in = p.getInputStream(); // connected to STDOUT of p out.write(new FileInputStream("/path/to/xml")); /// read in for succes/errors 

estoy usando

 javax.xml.parsers.DocumentBuilder; javax.xml.parsers.DocumentBuilderFactory; javax.xml.parsers.ParserConfigurationException; 

Si tienes una cadena XML puedes analizarla por:

 Document doc = null; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); InputSource is = new InputSource(); is.setCharacterStream(new StringReader(xml)); doc = db.parse(is); 

Por favor no olvide la manipulación de excepciones.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.