Android上的XMLSchemavalidation

我维护JDOM项目,并试图在Android上“authentication”它。 大多数事情都可以正常工作,但XML Schemavalidationcertificate是有问题的…

我的问题是:有没有办法在Android上进行XMLSchemavalidation? 如果有,如何?

这样的问题之前已经被问到过,但没有确定的答案:

  • Android架构validation
  • Android中的XML模式validation

这是我现在“知道”(如果我错了,纠正我)…:

  • SchemaFactory.newInstance(“ http://www.w3.org/2001/XMLSchema ”) – IllegalArgumentException失败
  • 来自Harmony项目的Android中的默认“ExpatParser”不支持XMLSchemavalidation。
  • 可以在Android应用程序中加载Xerces,甚至可以使用它进行parsing,但不要执行validationparsing – 当您尝试获取导致应用程序崩溃的“致命”Androidexception时。

我已经研究了一段时间了,我已经把下面的“研究”放在一起了:

  • JDOM2和Android
  • JDOM2 – Android与Xerces

如果任何人有关于Android的XMLSchemavalidation的更多信息,我将不胜感激任何input。

如果任何人已经成功完成了XML的XMLSchemavalidation,并且可以帮助我获得JDOM的工作function,他们将获得数千个互联网点… ;-),并将在JDOM代码和提交消息中不朽。

Solutions Collecting From Web of "Android上的XMLSchemavalidation"

我很着迷,几年后,这仍然是一个悬而未决的问题。 但似乎只有坏消息。 根据AOSP问题跟踪器模式validation目前似乎不支持标准的Android API,Google似乎不愿意修复它:

我们的XML API(包括SAX,XmlPull和DOM)不支持以下任何一种:

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

但是,相同故障单的一位评论者引用了一个解决方法 ,并使用Xerces端口提供了示例代码。 到目前为止,我不知道这是否超出了你的想法,但我希望它有帮助。

为了解决这个问题: SchemaFactoryFinder只知道下面的Schema定义:

使用任何其他架构定义会导致失败(但它会将其logging在debugging级别)。 显然这是你的情况,因为你正在使用2011架构的另一个参考。 所以“正确”引用模式定义应该可以解决这个问题。

我想你可以使用RelaxNG – 有很多validation器可用。 http://relaxng.org/#validators

特别感兴趣的应该是 – http://www.kohsuke.org/relaxng/bali/doc/https://msv.java.net/http://www.davidashen.net/rnv.html

后者是C实现,前两个是用Java编写的。

如果你需要高性能的话,你可以在rnv源代码中编写一些JNI代码和调用函数。 更简单的方法是使用NDK为Android构buildrnv,然后使用参数调用它的可执行文件。

就像是

 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 

我在用

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

如果你有一个XMLstring,你可以parsing它:

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

请不要忘记exception处理。