Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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 使用XMLReader根据XSD验证XML_Java_Xml_Xsd_Xml Parsing_Xsd Validation - Fatal编程技术网

Java 使用XMLReader根据XSD验证XML

Java 使用XMLReader根据XSD验证XML,java,xml,xsd,xml-parsing,xsd-validation,Java,Xml,Xsd,Xml Parsing,Xsd Validation,网上有很多关于这个验证过程的手册。尽管如此,我还是找不到代码不能正常工作的原因。我得到的输入模式和xml的值 在调试器模式下,一切似乎都很好。架构设置正确等等。想法?我想问题在于XML中未定义名称空间 尝试显式设置命名空间(请参阅XSD中的targetNamespace: static String xmlString = "<?xml version=\"1.0\"?>" + "<note xmlns=\"http://www.java2s.com\">" +

网上有很多关于这个验证过程的手册。尽管如此,我还是找不到代码不能正常工作的原因。我得到的输入模式和xml的值


在调试器模式下,一切似乎都很好。架构设置正确等等。想法?

我想问题在于XML中未定义名称空间

尝试显式设置命名空间(请参阅XSD中的
targetNamespace

static String xmlString = "<?xml version=\"1.0\"?>" +
    "<note xmlns=\"http://www.java2s.com\">" +
    "<to>rtoName</to>" +
    "<from>FromName</from>" +
    "<heading>Info</heading>" +
    "<body>Message Body</body>" +
    "</note>";
静态字符串xmlString=“”+
"" +
“名称”+
“FromName”+
“信息”+
“邮件正文”+
"";

我想问题在于XML中未定义名称空间

尝试显式设置命名空间(请参阅XSD中的
targetNamespace

static String xmlString = "<?xml version=\"1.0\"?>" +
    "<note xmlns=\"http://www.java2s.com\">" +
    "<to>rtoName</to>" +
    "<from>FromName</from>" +
    "<heading>Info</heading>" +
    "<body>Message Body</body>" +
    "</note>";
静态字符串xmlString=“”+
"" +
“名称”+
“FromName”+
“信息”+
“邮件正文”+
"";

您使用
XMLReader
有什么特殊原因吗?
我只想介绍另一种方式,您可能会发现它很有用:

import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;      

// ...

   try {
        // load schema from file
        File schemaFile = new File(schemaLocation);
        // load xml source form string holding the content
        Source xmlFile = new StreamSource(new StringReader(fileContent));

        SchemaFactory schemaFactory = SchemaFactory
            .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);

        Schema schema = schemaFactory.newSchema(schemaFile);

        Validator validator = schema.newValidator();

        validator.validate(xmlFile);

        System.out.println("XML is valid");

    } catch (Exception e) {

        System.out.println("XML is NOT valid");
        System.out.println("Reason: " + e.getMessage());

    }

使用
XMLReader
有什么特殊原因吗?
我只想介绍另一种方式,您可能会发现它很有用:

import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;      

// ...

   try {
        // load schema from file
        File schemaFile = new File(schemaLocation);
        // load xml source form string holding the content
        Source xmlFile = new StreamSource(new StringReader(fileContent));

        SchemaFactory schemaFactory = SchemaFactory
            .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);

        Schema schema = schemaFactory.newSchema(schemaFile);

        Validator validator = schema.newValidator();

        validator.validate(xmlFile);

        System.out.println("XML is valid");

    } catch (Exception e) {

        System.out.println("XML is NOT valid");
        System.out.println("Reason: " + e.getMessage());

    }

可能是名称空间问题?您的模式有目标名称空间,因此您可以尝试@KonstantinV.Salikhov之类的操作,但您的建议与验证器的使用有关。可能是名称空间问题?您的模式有目标名称空间,因此您可以尝试@KonstantinV.Salikhov之类的操作,但您的建议与验证器的使用有关.谢谢你的回答,我试过了,但不起作用。但是有了康斯坦丁和DRCB的建议,它终于起作用了!谢谢你的回答,我试过了,但不起作用了。但是有了康斯坦丁和DRCB的建议,它终于起作用了!不,它不起作用了。仍然是相同的错误。我对原因很好奇。我已经找到了原因,将写下来下面是为下一代人准备的:)必须使用方法-spf.setNamespaceAware(true)为SAXParserFactory手动设置命名空间感知。我认为这个过程已经在Validator API内部完成了,因此-不需要。感谢各位提供的非常有用的帮助。不,它不会工作。仍然是相同的错误。我很好奇原因。我已经找到了原因,将在这里为下一代编写:)必须使用方法-spf.setNamespaceAware(true)为SAXParserFactory手动设置命名空间感知。我认为这个过程已经在验证器API内部完成了,因此-不需要。谢谢你们的帮助。