我们如何在XML文件中自动检测XSD架构文件?

时间:2016-08-04 14:32:28

标签: java xml xsd

我正在尝试针对许多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内部手动编写的。

1 个答案:

答案 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.
    }

});