我现在在写一个解析xml的java程序,用的是dom。有一个schema文件,需要判断xml文件是否符合这个schema,符合就解析xml文件,不符合就报错。总之就是要校验一下xml文件。我在网上找到一个程序:
public boolean validate(InputStream in, InputStream schema, ErrorHandle errorHandle)
throws Exception {
log.debug("DefaultParser.validate() begin:");
boolean result = false;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/
schemaLanguage", "http://www.w3.org/2001/XMLSchema");
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/
schemaSource",new File("myschema.xsd"));
DocumentBuilder parser = factory.newDocumentBuilder();
parser.setErrorHandler(errorHandle); parser.parse(in); if (errorHandle.getMsgList().size() == 0) {
result = true;
}
log.debug("DefaultParser.validate() result:" + result);
return result;
}
但是运行之后没有效果,明显不符合schema的xml文件程序也不报错,不知道问题出在哪里。这个程序好像是针对sax的,不知道我用在dom上行不行。还有那个errorhandler到底是干什么的?,文档上面说是SAX 错误处理程序的基本接口,dom可以使用吗?我用程序中设置了myschema.xsd之后,java是调用xmlns中的schema还是程序设定的值?
public boolean validate(InputStream in, InputStream schema, ErrorHandle errorHandle)
throws Exception {
log.debug("DefaultParser.validate() begin:");
boolean result = false;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/
schemaLanguage", "http://www.w3.org/2001/XMLSchema");
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/
schemaSource",new File("myschema.xsd"));
DocumentBuilder parser = factory.newDocumentBuilder();
parser.setErrorHandler(errorHandle); parser.parse(in); if (errorHandle.getMsgList().size() == 0) {
result = true;
}
log.debug("DefaultParser.validate() result:" + result);
return result;
}
但是运行之后没有效果,明显不符合schema的xml文件程序也不报错,不知道问题出在哪里。这个程序好像是针对sax的,不知道我用在dom上行不行。还有那个errorhandler到底是干什么的?,文档上面说是SAX 错误处理程序的基本接口,dom可以使用吗?我用程序中设置了myschema.xsd之后,java是调用xmlns中的schema还是程序设定的值?
File file=new File("test.xsd");
Schema schema=factory.newSchema(file);
Source source=new StreamSource("x.xml");
Validator validate=schema.newValidator();
validate.validate(source);