Android上的XMLSchema验证

rol*_*lfl 17 android xsd jdom xsd-validation

我维护JDOM项目,我试图在Android上'认证'它.大多数工作都很好,但XML Schema验证证明是有问题的......

我的问题是:有没有办法在Android上进行XMLSchema验证?如果有,怎么样?

之前曾有人问过这样的问题,但没有给出确凿的答案:

这就是我目前所知道的(如果我错了,请纠正我)......:

  • SchemaFactory.newInstance(" http://www.w3.org/2001/XMLSchema ") - 失败,出现IllegalArgumentException
  • 来自Harmony项目的Android中的默认"ExpatParser"不支持XMLSchema验证.
  • 可以在Android应用程序中加载Xerces,甚至可以解析它,但不要进行验证解析 - 当您尝试获取'致命'Android异常导致应用程序崩溃时.

我一直在研究这个问题已经有一段时间了,我已经整理了以下"研究":

如果有人在Android上有关于XMLSchema验证的任何更多信息,我将非常感谢任何输入.

如果有人成功地对XML进行了XMLSchema验证并且可以帮助我获得适用于JDOM的功能,那么他们将获得数千个互联网点... ;-)并将在JDOM代码中永生化并提交消息.

fab*_*ian -1

我认为你可以使用 RelaxNG - 有很多可用的验证器。 http://relaxng.org/#validators

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

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

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

就像是

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
Run Code Online (Sandbox Code Playgroud)