Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中验证xml w.r.t XSD_Java_Xml_Xsd - Fatal编程技术网

在java中验证xml w.r.t XSD

在java中验证xml w.r.t XSD,java,xml,xsd,Java,Xml,Xsd,我试图验证一个xml文件,该文件是用xsd格式的模式w.r.t生成的。 问题是我是否需要在我的系统上传递模式的url或模式的位置? 类似地,我们是否需要传递xml文件的内容或其位置 下面是我正在使用的代码片段- public void validateDTFAgainstXSD() { String inputxml = "C:/Users/file.xml"; String schemaLocation = "https://github.abcd/schema.xsd";

我试图验证一个xml文件,该文件是用xsd格式的模式w.r.t生成的。 问题是我是否需要在我的系统上传递模式的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");
    }       
}
存在接受文件对象或源对象的newSchema()重载。你正在传递一个文件,这很好


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

获取此错误-org.apache.xerces.jaxp.validation.ValidatorImpl不能转换为javax.XML.bind.Validator,因为这一行:Validator Validator=(Validator)schema.newValidator();这只是从错误的包中导入验证器类的一个简单例子。基本Java错误。我为我的上述问题做了大量研究。在网站上与之相关的众多问题中,这个问题回答得最好-