用xsd校验XML的工具类

import java.io.BufferedWriter;

import java.io.ByteArrayInputStream;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;



import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.io.SAXReader;

import org.dom4j.util.XMLErrorHandler;

import org.xml.sax.SAXException;



/**

 * 使用Dom4j校验xml是否符合schema

 * @author fengguang_cn

 *

 */

public class XmlValidate {

	/**

	 * 

	 * @param dataxml

	 * @param schema

	 * @return 校验成功则返回true,否则返回false

	 * @throws SAXException

	 * @throws IOException

	 * @throws DocumentException

	 */

	public static boolean validate(String dataxml, String schema)

			throws SAXException, IOException, DocumentException {

		XMLErrorHandler errorHandler = new XMLErrorHandler();

		Document document = null;

		BufferedWriter out = null;



		SAXReader reader = new SAXReader();

		reader.setValidation(true);

		reader.setFeature("http://xml.org/sax/features/validation", true);

		reader.setFeature("http://apache.org/xml/features/validation/schema",

				true);



		String sysTempdir = System.getProperty("java.io.tmpdir");

		String tempSchemaFileName = sysTempdir + "temp"

				+ String.valueOf(Math.random()).substring(2) + ".xsd";

		File f = new File(tempSchemaFileName);

		f.createNewFile();

		out = new BufferedWriter(new FileWriter(f));

		out.write(schema);

		out.close();

		String uri = "file:" + tempSchemaFileName.replace('//', '/');

		reader

				.setProperty(

						"http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation",

						uri);

		reader.setErrorHandler(errorHandler);

		document = reader.read(new ByteArrayInputStream(dataxml.getBytes()));



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

			System.out.println("xml不符合Schema:");

			System.out.println((errorHandler.getErrors()));

			f.delete();

			return false;



		} else {

			f.delete();

			return true;

		}



	}



	/**

	 * 

	 * @param dataxml

	 * @param schema

	 * @return 校验成功则返回document,如果失败则返回Null

	 * @throws SAXException

	 * @throws IOException

	 * @throws DocumentException

	 */

	public static Document validateWithDocRetrun(String dataxml, String schema)

			throws SAXException, IOException, DocumentException {

		XMLErrorHandler errorHandler = new XMLErrorHandler();

		Document document = null;

		BufferedWriter out = null;



		SAXReader reader = new SAXReader();

		reader.setValidation(true);

		reader.setFeature("http://xml.org/sax/features/validation", true);

		reader.setFeature("http://apache.org/xml/features/validation/schema",

				true);



		String sysTempdir = System.getProperty("java.io.tmpdir");

		String tempSchemaFileName = sysTempdir + "temp"

				+ String.valueOf(Math.random()).substring(2) + ".xsd";

		File f = new File(tempSchemaFileName);

		f.createNewFile();

		out = new BufferedWriter(new FileWriter(f));

		out.write(schema);

		out.close();

		String uri = "file:" + tempSchemaFileName.replace('//', '/');



		reader

				.setProperty(

						"http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation",

						uri);

		reader.setErrorHandler(errorHandler);

		document = reader.read(new ByteArrayInputStream(dataxml.getBytes()));//ByteArrayInputStream(dataxml.getBytes("")));



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

			System.out.println("xml不符合Schema:");

			System.out.println((errorHandler.getErrors()));

			//f.delete();

			return null;

		} else {

			//f.delete();

			return document;

		}



	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值