java xsd_『XSD校验XML』使用java通过XSD校验XML文件

本文简单介绍使用java语言,通过XSD文件来校验XML文件结构。

XML和XSD介绍

MySQL数据迁移和项目魔法计算器都用到了XML文件,这样可以解耦出配置属性,使项目更加灵活,不用动不动就去改动代码。

描述一个XML文件的结构。

就是说XSD文件内部通过XML的语法编写,来描述另一份XML文件应有的元素,节点等结构组成,可以起到规范以及校验的作用。

同样作用的还有DTD文件,不过XSD文件更优越一些。

通过Java代码校验XML

public class CheckXML {

public static void checkXML() {

String path = System.getProperty("user.dir");

System.out.println("地址为:" + path);

//xsd文件路径,自己填写路径

String xsdPath = path + "\\xsd\\balabala.xsd";

//xml文件路径,自己填写路径

String xmlPath = path + "\\xml\\balabala.xml";

System.out.println("xsdPath为:" + xsdPath);

System.out.println("xmlPath为:" + xmlPath);

try {

//错误消息处理类

XMLErrorHandler errorHandler = new XMLErrorHandler();

//获得解析器工厂类

SAXParserFactory factory = SAXParserFactory.newInstance();

//在解析XML是进行验证

factory.setValidating(true);

//支持命名空间

factory.setNamespaceAware(true);

//获得解析器

SAXParser parser = factory.newSAXParser();

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

SAXReader reader = new SAXReader();

//读取XML文件

Document document = reader.read(new File(xmlPath));

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

// 发生错误时得到相关信息

validator.setErrorHandler(errorHandler);

// 进行校验

validator.validate(document);

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

//通过是否有错误信息判断校验是否匹配

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

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

writer.write(errorHandler.getErrors());

} else {

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

}

} catch (ParserConfigurationException | SAXException | DocumentException |

IOException e) {

e.printStackTrace();

}

}

如果出现"不允许有匹配 "[xX][mM][lL]"的处理指令目标"错误,是因为<?xml version="1.0" encoding="GB2312"?>信息头格式不规范,比如前面有空格。

文章内容为个人理解,如有错误欢迎指出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值