您的位置:首页 > 其它

关于XML的验证(DTD与XSD)一点实践

2015-12-23 23:32 435 查看
[转自] http://blog.chinaunix.net/uid-276853-id-366491.html
关于XML的验证一点实践

1)此方法是在XML文档中绑定对应的DTD文件来进行的

//部分程序代码如下:

//为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

dbf.setValidating(true);//设置验证有效

MyHandler handler = new MyHandler();//处理验证的类,具体在下

DocumentBuilder db = dbf.newDocumentBuilder();

db.setErrorHandler(handler);

Document doc = null;

doc = db.parse(new File(filename));//要验证的XML文件放入验证

if (handler.errorMessage == null) {

System.out.println("XML文件是有效的");

}

else {

System.out.println("XML文件不是有效的");

return false;

}

class MyHandler extends DefaultHandler {

String errorMessage = null;

public void error(SAXParseException e) throws SAXException {

errorMessage = e.getMessage();

System.out.println("一般错误:" + errorMessage);

}

public void fatalError(SAXParseException e) throws SAXException {

errorMessage = e.getMessage();

System.out.println("致命错误:" + errorMessage);

}

}


说明: XML文档中若根元素含有属性如下:

//dtd路径设置
xmlns="un:hpedi_ex_mnl">//属性名为xmlns
…..

则在DTD中要增加设置为:

//这是某根元素含列表

//这个才是根元素属性设置
 
2)另外方法是:采用DOM4J来做,就不需要在具体XML文件中绑定XSD模式文件了。(推荐)
先当然是要添加Dom4j.jar包到项目路径中,再在具体java文件中import相关类
其中XSD验证部分代码如下:
XMLErrorHandler errorHandler = new XMLErrorHandler();
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);// 注意要设置有效,否则后面验证无用
factory.setNamespaceAware(true);// XSD中有命名空间设置
SAXParser parser = factory.newSAXParser();
SAXReader xmlReader = new SAXReader();
Document documentObject = (Document) xmlReader.read(new File(filename));// filename是对应符合XSD模式的具体xml文件绝对路径名
String xsdpathfile = "e:\\schemaexample\\example.xsd";// xsdPathfile是绝对路径名
parser.setProperty(
"http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
parser.setProperty(
"http://java.sun.com/xml/jaxp/properties/schemaSource", "file:"
+ xsdpathfile);
SAXValidator validator = new SAXValidator(parser.getXMLReader());
validator.setErrorHandler(errorHandler);
validator.validate(documentObject);
XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());
if (errorHandler.getErrors().hasContent()) {
writer.write(errorHandler.getErrors());
return false;
} else {
System.out.println("validate success.");
return true;
}

当然还可以使用Jdom来做,如果熟悉的话。
参考文章:(http://www-128.ibm.com/developerworks/cn/xml/tips/x-tipvalschm/index.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: