我写的用JDK1.5自带的SchemaFactory验证XML的代码片断
/**
 * 根据Schema验证XML文档的正确性
 * 
 * @param xmlPathName
 *            XML文档的路径
 * @param schemaPathName Schema文件的路径
 * @return
 */
private boolean checkXML(String xmlPathName, String schemaPathName) {
boolean valid = true;
SchemaFactory sf = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
try {
LogUtil.getInstance().getLogger().log(Level.INFO,
"根据如下Schema文件验证XML:" + schemaPathName);
LogUtil.getInstance().getLogger().log(Level.INFO,
"待验证的XML的路径为:" + xmlPathName);
InputStream schemaStream = PaperSpongeUtil
.getResourceAsStream(schemaPathName);
if (schemaStream == null) {
return false;
}
Source schemaSource = new StreamSource(schemaStream);
Schema schema = sf.newSchema(schemaSource);
Validator validator = schema.newValidator();
InputStream xmlStream = PaperSpongeUtil
.getResourceAsStream(xmlPathName);
Source xmlSource = new StreamSource(xmlStream);
validator.validate(xmlSource);
LogUtil.getInstance().getLogger().log(Level.INFO, "完成对XML的验证。"); } catch (SAXException saxe) {
LogUtil.getInstance().getLogger().log(Level.SEVERE,
"解析Schema的时候出错!", saxe);
valid = false;
} catch (IOException ioe) {
LogUtil.getInstance().getLogger()
.log(Level.SEVERE, "读取文件时出错!", ioe);
valid = false;
}
return valid;
}使用起来是很简单的,根据schema构造一个validator,用此validator的validate方法验证xml输入流就可以了。

解决方案 »

  1.   

    如果不是JDK1.5, 而是JDK1.4.2中怎么解决呢?在线等待!!
      

  2.   

    org.xml.sax.SAXNotRecognizedException: http://java.sun.com/xml/jaxp/properties/schemaLanguage
    at org.apache.xerces.framework.XMLParser.setProperty(XMLParser.java:1682)
    at org.apache.xerces.parsers.SAXParser.setProperty(SAXParser.java:770)
    at org.apache.xerces.jaxp.SAXParserImpl.setProperty(SAXParserImpl.java:183)
    at com.cs.eximbills.xmlschema.TestXMLSchema.validatexmlbyxsd(TestXMLSchema.java:60)
    at com.cs.eximbills.xmlschema.TestXMLSchema.main(TestXMLSchema.java:97)这是什么错啊!!
      

  3.   

    网上搜索吧。
    SAXParserFactory spf = SAXParserFactory.newInstance();    
    // Set namespaceAware to true to get a parser that corresponds to    
    // the default SAX2 namespace feature setting.  This is necessary    
    // because the default value from JAXP 1.0 was defined to be false.    spf.setNamespaceAware(true);    
    spf.setValidating(true);    
    SAXParser saxParser = spf.newSAXParser();    
    // Set the schema language if necessary    
    try {        
    saxParser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);    
    } catch (SAXNotRecognizedException x) {        
    // This can happen if the parser does not support JAXP 1.2        
    ...    
    }   
     ...    
    saxParser.setProperty(JAXP_SCHEMA_SOURCE, new File(schemaSource));