我正在尝试使用 oasis 目录验证 xml 文件。我需要提供 xml 文件的路径和包含 xsd 作为输入的目录的路径,并将验证(真或错误消息)作为输出。
到目前为止我所做的是:
File schemaFile = new File("personal.xsd"); // etc.
Source xmlFile = new StreamSource(new File("personal.xml"));
SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/XML/XMLSchema/v1.1"); // we need to validate with v1.1
try {
Schema schema = schemaFactory.newSchema(schemaFile);
Validator validator = schema.newValidator();
validator.validate(xmlFile);
System.out.println(xmlFile.getSystemId() + " is valid");
} catch (SAXException e) {
System.out.println(xmlFile.getSystemId() + " is NOT valid reason:" + e);
} catch (IOException e) {
e.printStackTrace();
}
所以它到目前为止工作。
问题是添加目录。我找到了一些代码示例,但它不起作用:
Source xmlFile = new StreamSource(new File("personal.xml"));
String [] catalogs = {"file:///catalog.xml"};
SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/XML/XMLSchema/v1.1");
try {
XMLCatalogResolver resolver = new XMLCatalogResolver();
resolver.setPreferPublic(true);
resolver.setCatalogList(catalogs);
schemaFactory.setResourceResolver(resolver);
Schema schema = schemaFactory.newSchema();
Validator validator = schema.newValidator();
validator.validate(xmlFile);
}
最后,xsd 没有找到,验证失败。
有人可以解释我做错了什么吗?我觉得它应该很简单,但我错过了一些东西。
感谢。