我维护JDOM project,我正在尝试在Android上'认证'它。大多数工作都很好,但XML Schema验证证明是有问题的......
我的问题是:有没有办法在Android上进行XMLSchema验证?如果有,怎么样?
之前已经问过这样的问题,但没有给出确凿的答案:
这就是我目前所知道的(如果我错了,请纠正我)......:
我一直在研究这个问题已有一段时间了,我已将以下'研究'放在一起:
如果有人在Android上有任何关于XMLSchema验证的信息,我会非常感谢任何输入。
如果有人成功地对XML进行了XMLSchema验证并且可以帮助我获得适用于JDOM的功能,那么他们将获得数千个互联网点...... ;-)并将在JDOM代码中永生化并提交消息。
答案 0 :(得分:2)
我很着迷,几年后,这仍然是一个悬而未决的问题。 但是,似乎只有坏消息。根据{{3}}架构验证目前似乎不支持标准的Android API,谷歌似乎不愿意修复它:
我们的XML API(包括SAX,XmlPull和DOM)不支持任何 以下内容:
XML Schema XML DTDs (including external entity declarations and references) validation element content whitespace
但是,同一张故障单的一个评论者引用AOSP Issue Tracker,并使用Xerces端口提供示例代码。我不知道这是否超出了你的想法,到目前为止,但我希望它有所帮助。
将其包装起来: workaround只知道以下架构定义:
使用任何其他模式定义会导致它失败(但它会在调试级别上记录它)。显然,对于您来说就是这种情况,因为您正在使用另一个对2011架构的引用。因此,“正确”引用模式定义应解决此问题。
答案 1 :(得分:0)
我正在使用
javax.xml.parsers.DocumentBuilder;
javax.xml.parsers.DocumentBuilderFactory;
javax.xml.parsers.ParserConfigurationException;
如果你有一个XML字符串,你可以通过以下方式解析它:
Document doc = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xml));
doc = db.parse(is);
请不要忘记异常处理。
答案 2 :(得分:-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源中的函数。一种更简单的方法就是构建 rnv for Android,使用NDK然后用参数调用它的可执行文件。
像
这样的东西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