XML Schema模式验证

1、得到一个SchemaFactory对象

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

2、创建Schema对象

 Schema schema=schemafactory.newSchema(xsdfile);

3、得到验证器

 Validator vaildator=schema.newValidator();

4、使用验证器

 vaildator.setErrorHandler((ErrorHandler) errorHandler);
 vaildator.validate(new StreamSource(xmlfile));

package com.schema; 

import java.io.File;

import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;

public class TestSchema {
	public static void main(String[] args) {
		 File xsdfile=new File("xml/orders.xsd");   //项目下引见一个xml文件夹,将要匹配的两个文件放入
		 File xmlfile=new File("xml/orders.xml");
		 Handler errorHandler=null;
		 try{
			 SchemaFactory schemafactory=SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); //
			 Schema schema=schemafactory.newSchema(xsdfile);
			 Validator vaildator=schema.newValidator();
			 errorHandler=new Handler();
			 vaildator.setErrorHandler((ErrorHandler) errorHandler);
			 vaildator.validate(new StreamSource(xmlfile));
		 }catch(Exception e){
			 System.out.println(e);
		 }
		 if(errorHandler.errorMessage==null){
			 System.out.println(""+xmlfile.getName()+"符合模式");
		 }else{
			 System.out.println(""+xmlfile.getName()+"不符合模式");
		 }
		 
	}
	
}
class Handler extends DefaultHandler{
	String errorMessage=null;
	public void error(SAXParseException e){
		errorMessage=e.getMessage();
		int row=e.getLineNumber();
		int colums=e.getColumnNumber();
		System.out.println(":"+errorMessage+"在"+row+"行,"+colums);
	}
	public void fatalError(SAXParseException e)throws SAXException{
		errorMessage=e.getMessage();
		int row=e.getLineNumber();
		int colums=e.getColumnNumber();
		System.out.println(":"+errorMessage+""+row+","+colums);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值