0

我正在尝试验证一个 xml 文件,该文件是由 xsd 格式的模式生成的。疑问是我是否需要传递架构的 url 或系统上架构的位置?同样,我们是否需要传递 xml 文件的内容或其位置?

下面是我正在使用的代码片段 -

public void validateDTFAgainstXSD()
{
    String inputxml = "C:/Users/file.xml";
    String schemaLocation = "https://github.abcd/schema.xsd";
    try
    {
        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        File schemaFile = new File(schemaLocation);
        Schema schema = factory.newSchema(schemaFile);
        javax.xml.validation.Validator validator = schema.newValidator();

        Source source = new StreamSource(new StringReader(inputxml));
        validator.validate(source);
        System.out.println("File validated");
    }
    catch(Exception ex)
    {
        System.out.println("File not validated");
    }       
}
4

1 回答 1

1

有 newSchema() 重载采用 File 对象或 Source 对象。您正在传递一个文件,这很好。

Validator.validate() 方法需要一个 Source。如果你有一个文件名,你可以使用 new StreamSource(new File(filename)) 构造一个 Source。您这样做的方式是错误的:它假定您在 StringReader 中包装的字符串包含要验证的 XML,而不是包含 XML 的文件的名称。

于 2013-03-31T19:12:14.437 回答