您的位置:首页 > 其它

xsd验证xml的两种方法

2012-08-31 15:49 1216 查看
方法一:
private boolean validateXMLByXSD(String xml) throws SAXException, UnsupportedEncodingException

{

//建立schema工厂

SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");

//建立验证文档文件对象,利用此文件对象所封装的文件进行schema验证

File schemaFile = new File(EAPConfig.web_root_path + "soc/Resources/eventRelevance/rce.xsd");

//利用schema工厂,接收验证文档文件对象生成Schema对象

Schema schema = schemaFactory.newSchema(schemaFile);

//通过Schema产生针对于此Schema的验证器,利用schenaFile进行验证

Validator validator = schema.newValidator();

//得到验证的数据源

Source source = new StreamSource("D:\\test.xml");

//开始验证,成功输出success!!!,失败输出fail

//参数还可以用文件的String转为的inputstreamnew //ByteArrayInputStream(text.getBytes("UTF-8"));

try {

validator.validate(source);

}

catch (Exception ex) {

System.out.println( ex.getMessage());

ex.printStackTrace();

return false;

}

return true;

}

方法二:需要引入dom4j.jar

/**

* 通过XSD(XML Schema)校验XML

*/

public static void validateXMLByXSD() {

String xmlFileName = "/test.xml";

String xsdFileName = "/rce.xsd";

try {

//创建默认的XML错误处理器

XMLErrorHandler errorHandler = new XMLErrorHandler();

//获取基于 SAX 的解析器的实例

SAXParserFactory factory = SAXParserFactory.newInstance();

//解析器在解析时验证 XML 内容。

factory.setValidating(true);

//指定由此代码生成的解析器将提供对 XML 名称空间的支持。

factory.setNamespaceAware(true);

//使用当前配置的工厂参数创建 SAXParser 的一个新实例。

SAXParser parser = factory.newSAXParser();

//创建一个读取工具

SAXReader xmlReader = new SAXReader();

//获取要校验xml文档实例

Document xmlDocument = (Document) xmlReader.read(new File(xmlFileName));

//设置 XMLReader 的基础实现中的特定属性。核心功能和属性列表可以在 http://sax.sourceforge.net/?selected=get-set 中找到。

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:" + xsdFileName);

//创建一个SAXValidator校验工具,并设置校验工具的属性

SAXValidator validator = new SAXValidator(parser.getXMLReader());

//设置校验工具的错误处理器,当发生错误时,可以从处理器对象中得到错误信息。

validator.setErrorHandler(errorHandler);

//校验

validator.validate(xmlDocument);

XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());

//如果错误信息不为空,说明校验失败,打印错误信息

if (errorHandler.getErrors().hasContent()) {

System.out.println("XML文件通过XSD文件校验失败!");

writer.write(errorHandler.getErrors());

} else {

System.out.println("Good! XML文件通过XSD文件校验成功!");

}

} catch (Exception ex) {

System.out.println("XML文件: " + xmlFileName + " 通过XSD文件:" + xsdFileName + "检验失败。\n原因: " + ex.getMessage());

ex.printStackTrace();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息