我正在尝试针对许多XSD文件验证XML文件。此时我只能手动输入xsd架构。 (我的意思是我检查我的XML文件并查看XSD定义)。如何在任何XML文件中检测XSD架构文件?
到目前为止我尝试了什么: //以下方法针对多个xsd模式文件检查xml文件。
public static void XSDValidation() throws SAXException, IOException, ParserConfigurationException {
try {
SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
Schema sch = schemaFactory.newSchema(new Source[] { new StreamSource(new FileInputStream("role-1.2.xsd")),
new StreamSource(new FileInputStream("role-1.1.xsd")) });
Validator validator = sch.newValidator();
validator.validate(new StreamSource("role.xml"));
System.out.println("INFO: Validation is done successfully.");
} catch (Exception e) {
System.out.println("ERROR: Validation is failed.");
}
}
我使用DOM Parser和Java 8.
感谢所有人的帮助。
编辑: @ kjhughes我不是简单地问
根据XSD文件验证XML文件的最佳方法是什么?
我的问题:我们如何检测XML文件中的XSD架构文件。例如,当我想验证包含b.xsd和c.xsd的a.xml时,我想要以真实的顺序自动检测这些文件。我的意思是,如果XML首先使用c.xsd中的命名空间,那么应该检测它。在我的示例中,XSD架构文件及其顺序是通过检查XML内部手动编写的。
答案 0 :(得分:1)
您可以使用LSResourceResolver来解析架构依赖关系。虽然您必须在此处指定所有依赖项,但它会将代码与模式引用隔离开来。
schemaFactory.setResourceResolver(new LSResourceResolver(){
@Override
public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI) {
// resovle the path to schema , read and return it.
}
});