Java运行时库支持验证。上次我检查的是幕后的Apache Xerces解析器。你可能应该使用
javax.xml.validation.Validator。
import javax.xml.XMLConstants;import javax.xml.transform.Source;import javax.xml.transform.stream.StreamSource;import javax.xml.validation.*;import java.net.URL;import org.xml.sax.SAXException;//import java.io.File; // if you use Fileimport java.io.IOException;...URL schemaFile = new URL("http://host:port/filename.xsd");// webapp example xsd: // URL schemaFile = new URL("http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd");// local file example:// File schemaFile = new File("/location/to/localfile.xsd"); // etc.Source xmlFile = new StreamSource(new File("web.xml"));SchemaFactory schemaFactory = SchemaFactory .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);try { Schema schema = schemaFactory.newSchema(schemaFile); Validator validator = schema.newValidator(); validator.validate(xmlFile); System.out.println(xmlFile.getSystemId() + " is valid");} catch (SAXException e) { System.out.println(xmlFile.getSystemId() + " is NOT valid reason:" + e);} catch (IOException e) {}模式工厂常量是http://www.w3.org/2001/XMLSchema定义XSD 的字符串。上面的代码针对URL验证了WAR部署描述符,http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd但你同样可以针对本地文件进行验证。
你不应使用DOMParser来验证文档(除非你的目标仍然是创建文档对象模型)。这将在解析文档时开始创建DOM对象-如果你不打算使用它们,那将很浪费。



