java xsd校验xml文件

1、需要maven依赖,版本的话根据自己需求来定

<dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>

2、代码案例

XMLErrorHandler xmlErrorHandler = new XMLErrorHandler();//xml默认的错误处理器

            SAXParserFactory factory = SAXParserFactory.newInstance();//获取基于SAX的解析器实例

            factory.setValidating(true);//解析器在解析xml内容

            factory.setNamespaceAware(true);//解析器对xml名称空间的支持

            SAXParser saxParser = factory.newSAXParser();//使用当前配置的工厂参数,创建一个新的SAXParser实例

            SAXReader xmlReader = new SAXReader();//创建一个读取文件

            Document xmlDocument = xmlReader.read(new File("xml文件的路径"));

            saxParser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage","http://www.w3.org/2001/XMLSchema");
            saxParser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource","file:"+"xsd文件路径");

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

            validator.setErrorHandler(xmlErrorHandler);//设置校验工具的错误处理器,当发生错误时,可以从处理对象中获取错误信息

            //开始校验xml
            validator.validate(xmlDocument);
            XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());

            /**
             * 判断校验xml文件是否存在错误信息
             */
            if (xmlErrorHandler.getErrors().hasContent()){
                Element errors = xmlErrorHandler.getErrors();//获取错误信息
                List<Node> list = errors.content();
                writer.write(xmlErrorHandler.getErrors());

                int count = 0;//记录xsd校验xml出现的错误次数

                String resultError = "";//拼接校验的xml错误信息

                for (Node node : list) {
                    String error = node.getText().split(":")[1];

                    if (error.contains("元素") && error.contains("无效")){
                        count++;
                        resultError += error;
                    }
                }

                System.out.println("共有"+count+"处错误");
                System.out.println(resultError);

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值