2016-08-04 19 views
1

我想验证一个XML文件对许多XSD文件。此时我只能手动输入xsd模式。 (我的意思是我检查我的XML文件并查看XSD定义)。如何检测任何XML文件中的XSD架构文件?我们如何自动检测XML文件中的XSD模式文件?

我到目前为止所尝试的是: //以下方法检查xml文件是否针对多个xsd模式文件。

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解析器和Java 8

提前感谢所有帮助。

编辑: @ kjhughes我并没有简单地问

什么是验证对一个XSD文件的XML文件的最佳方法是什么?

我的问题:我们如何检测XML文件中的XSD模式文件。例如,当我想验证包含b.xsd和c.xsd的a.xml时,我想要按照正确的顺序自动检测这些文件。我的意思是如果XML首先使用来自c.xsd的命名空间,那么它应该被检测到。在我的示例中,XSD模式文件及其顺序是通过检查XML内部来手动编写的。

+0

如何使用自定义entityresolver来查找引用的模式? – ulab

+0

@ulab我已阅读https://docs.oracle.com/javase/7/docs/api/org/xml/sax/EntityResolver.html,但实际上我无法理解我可以如何申请。你能解释一下吗? – limonik

+0

带有这些XSD声明的示例XML可以提供帮助。你可以发布样本吗? –

回答

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

}); 
相关问题