Java 使用XMLReader根据XSD验证XML
网上有很多关于这个验证过程的手册。尽管如此,我还是找不到代码不能正常工作的原因。我得到的输入模式和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中未定义名称空间 尝试显式设置命名空间(请参阅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内部完成了,因此-不需要。谢谢你们的帮助。