我写的用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输入流就可以了。
/**
* 根据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输入流就可以了。
解决方案 »
- java如何进行不定项查询
- 求opc(openscada)文档
- 继承关系下对象属性
- urlrewrite自动转向html地址
- 下面是我看的一段代码,可是我大体意思我懂了,里面具体的实现细节还不是很懂,希望高手解答。
- 为什么不能加入struts框架呢
- 一个图片不能正常显示的问题
- 请教一个jbuilder + tomcat 问题 StandardHost[localhost]: MAPPING configuration error for request URI /index.jsp
- 如何捆绑JBuild x 和Tomcat5
- 高分求救:jaas的样列
- 请问:如何根据.hbm.xml文件自动生成对应的表?
- 不好意思,就10分:(, 问个简单socket问题
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)这是什么错啊!!
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));