**
- 最近项目用到了xml文件传输(系统与系统之间)并用schema校验XML 特此做下记录:
**
自己写了一个工具类
public class XmlValidateUtil {
private static final Log logger = LogFactory.getLog(XmlValidateUtil.class);
private static final String SCHEMALANG = "http://www.w3.org/2001/XMLSchema";
/**
* Schema校验xml文件
* @param xmlPath xml字符串
* @param xsdPath xsd文件路径
* @return xml文件是否符合xsd定义的规则
*/
public static boolean xmlStringValidate(String xmlStr, String xsdPath) {
boolean flag = false;
try {
SchemaFactory factory = SchemaFactory.newInstance(SCHEMALANG);
//File schemaLocation = new File(xsdPath);
//Schema schema = factory.newSchema(schemaLocation);
//代替上面注释内容 注释内容测试可用【为啥要这样写 下面做解释】
InputStream inputStream =XmlValidateUtil.class.getResourceAsStream(xsdPath);
Source xsdsource = new StreamSource(inputStream);
Schema schema = factory.newSchema(xsdsource);
Validator validator = schema.newValidator();
InputStream is = new ByteArrayInputStream(xmlStr.getBytes());
//需要设置编码 否则会出字节解析错误
InputStreamReader in = new InputStreamReader(is, "UTF-8");
Source source = new StreamSource(in);
try {
validator.validate(source);
flag = true;
} catch (SAXException ex) {
logger.info("Schema校验xml文件 异常"+ex.getMessage());
}
} catch (Exception e) {
logger.info("Schema校验xml文件 异常"+e.getMessage());
}
return flag;
}
}
xmd文件是放在src目录下的tyshschema文件夹下面
目录如图
**调用类代码**
//schema校验xml文件
String xsdURL = "/tyshschema/test.xsd";
boolean ifPass = XmlValidateUtil.xmlStringValidate(reportXml, xsdPath);