private void validateXML(DOMSource source) throws Exception {
URL schemaFile = new URL("http://www.csc.liv.ac.uk/~valli/modules.xsd");
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI);
Schema schema = schemaFactory.newSchema(schemaFile);
Validator validator = schema.newValidator();
DOMResult result = new DOMResult();
try {
validator.validate(source, result);
System.out.println("is valid");
} catch (SAXException e) {
System.out.println("not valid because " + e.getLocalizedMessage());
}
}
但是这会返回一个错误说明:线程中的异常"main" java.lang.IllegalArgumentException:没有实现指定的模式语言的SchemaFactory:http://www.w3.org/2001/XMLSchema -instance可以加载
这是我的代码或实际的xsd文件的问题?
2 回答
该错误意味着您安装的Java没有任何可以解析XMLSchema文件的类,因此它不是架构或代码的问题 .
我很确定最近的JRE默认有相应的类,所以你能得到
java -version
的输出吗?更新:
您正在使用错误的XMLContants字符串 . 你想:
XMLConstants.W3C_XML_SCHEMA_NS_URI
这些文件基于底层系统 . 我在编写Android项目时遇到了同样的问题 . 我发现我必须使用Xerces-for-Android来解决我的问题 .
以下是我在Android上验证的问题,如果你的代码与Android有关,也许它会有所帮助,如果它没有,那么这个方法可能会帮助你使用你的底层系统:
创建验证实用程序 .
在Android操作系统上同时获取xml和xsd文件并对其使用验证实用程序 .
使用Xerces-For-Android进行验证 .
Android确实支持我们可以使用的一些软件包,我根据以下内容创建了我的xml验证工具:http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/validation/package-summary.html
我最初的沙箱测试非常流畅,然后我尝试将其移植到Dalvik并发现我的代码不起作用 . 有些事情与Dalvik不相同,所以我做了一些修改 .
我找到了对xerces for android的引用,所以我修改了我的沙箱测试( the following doesn't work with android, the example after this does ):
上面的代码必须修改一些与xerces for android(http://gc.codehum.com/p/xerces-for-android/)一起使用 . 您需要SVN才能获得该项目,以下是一些婴儿床注意事项:
使用上面的jar(最终我将它变成一个jar,只需将它直接复制到我的源代码中进行快速测试 . 如果你想做同样的事情,你可以使用Ant(http://ant.apache.org/manual/using.html)快速制作jar),我能够让我的xml验证工作:
Some Side Notes:
为了创建文件,我创建了一个简单的文件实用程序来将字符串写入文件:
我还需要写一个我可以访问的区域,所以我使用了:
有点hackish,它的工作原理 . 我确信有更简洁的方法可以做到这一点,但我想我会分享我的成功,因为我没有找到任何好的例子 .