使用Java针对两个架构验证xml

时间:2019-11-18 13:30:47

标签: java xml validation

我想验证一个在根元素中具有schemalocation的xml文件,而没有该文件的本地化。我想我可以使用它,但是问题是此xml包含位于xml文件中另一个元素上的另一个架构,并且我找不到一种定义架构的方法来验证单个文件。有人可以帮我吗?

SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(new URL(UrlToSchema));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(xmlFile));

这也是从xml文件获取变量UrlToSchema的一种方法吗?

1 个答案:

答案 0 :(得分:0)

您必须定义一个StreamSource数组以包含xml模式列表。 您可以参考javadoc

假定有两个xml模式,即xsds,代码应如下所示

    StreamSource[] xsdSources = new StreamSource[2]; 
    FileInputStream fis1 = new FileInputStream("schema1.xsd"); 
    sources[0] = new StreamSource(fis1); 
    FileInputStream fis2 = new FileInputStream("schema2.xsd"); 
    sources[1] = new StreamSource(fis2); 
    SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
    Schema schema = schemaFactory.newSchema(xsdSources);
    Validator validator = schema.newValidator();
    validator.validate(new StreamSource(xmlFile)); 

如果要读取ulr,可以使用以下代码。

InputStream fis1 = new URL("http://www.somesite.com/schema1.xsd").openStream();
sources[0] = new StreamSource(fis1);