zoukankan      html  css  js  c++  java
  • xsd校验xml

    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.StringWriter; 
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
     
    import javax.xml.XMLConstants;
    import javax.xml.transform.Source;
    import javax.xml.transform.stream.StreamSource;
    import javax.xml.validation.Schema;
    import javax.xml.validation.SchemaFactory;
    import javax.xml.validation.Validator;
     
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.Node;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXValidator;
    import org.dom4j.io.XMLWriter;
    import org.dom4j.util.XMLErrorHandler;
    import org.xml.sax.SAXException;
     
    import com.ufgov.bank.common.log.*;
     
    public class validateXml {
        private static final SimpleDateFormat sdf2 = new SimpleDateFormat(
                "yyyyMMddHHmmssSSS");
        public boolean validate(String xsdUrl, String xml) throws Exception {
            Date date = new Date();
            LogOperation.writeLog("client","xsd文件路径:"+xsdUrl,sdf2.format(date));
            LogOperation.writeLog("client","xsd校验前的xml:"+xml,sdf2.format(date));
            // 获取Schema工厂类
            // 这里的XMLConstants.W3C_XML_SCHEMA_NS_URI的值就是://http://www.w3.org/2001/XMLSchema
            SchemaFactory factory = SchemaFactory
                    .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            // 获取XSD文件,以流的方式读取到Source中
            // XSD文件的位置相对于类文件位置
            Source schemaSource = new StreamSource(new FileInputStream(xsdUrl));
            Schema schema = factory.newSchema(schemaSource);
            // 这里是将一个DOM树对象转换成流对象,以便对DOM树对象验证
            // 如果是对XML文件进行验证,用FileInputStream即可
            ByteArrayInputStream bais = new ByteArrayInputStream(
                    xml.getBytes("GBK"));
            // 获取验证器,验证器的XML Schema源就是之前创建的Schema
            Validator validator = schema.newValidator();
            XMLErrorHandler errorHandler = new XMLErrorHandler();
            validator.setErrorHandler(errorHandler);
            Source source = new StreamSource(bais);
            // 执行验证
            try {
                validator.validate(source);
                if (errorHandler.getErrors().hasContent()) {
                    List errorlist = errorHandler.getErrors().selectNodes("error");
                    for (int i =   0; i < errorlist.size(); i++) {
     
                        String errorMsg = getErrorMsg(xsdUrl,
                                (Element) errorlist.get(i));
                        if (errorMsg != null) {
                            System.out.println(errorMsg);
                             
                            LogOperation.writeLog("client",errorMsg,sdf2.format(date));
                        }
                    }
                    return false;
                } else {
                    return true;
                }
                 
            } catch (Exception ex) {
                ex.printStackTrace();
                //throw ex;
                return false;
            } finally {
                bais.close();
            }
        }
     
        private static String getErrorMsg(String path, Element errorElement)
                throws Exception {
            String errorContent = errorElement.getText();
            String attribute = "attribute '";
            String strAttrib = "";
            if (errorContent.toLowerCase().indexOf("'data'") >=   0) {
                strAttrib = "dataAttribute";
            } else if (errorContent.toLowerCase().indexOf("'row'") >=   0) {
                strAttrib = "rowAttribute";
            }
            if (errorContent.toLowerCase().indexOf(attribute) >=   0) {
                String tempContent = errorContent.substring(errorContent
                        .toLowerCase().indexOf(attribute) + attribute.length());
                String attributeName = tempContent.substring(  0,
                        tempContent.indexOf("'"));
                Document document = TextReader.ReadXmlFile(new File(path));
                String errorPath = "xs:attributeGroup[@name='" + strAttrib + "']/"
                        + "xs:attribute[@name='" + attributeName + "']/@id";
                Node errorNode = document.getRootElement().selectSingleNode(
                        errorPath);
                return errorNode.getText()+":["+errorContent+"]";
            }
            return null;
        }
     
    }
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.StringWriter;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
     
    import javax.xml.XMLConstants;
    import javax.xml.transform.Source;
    import javax.xml.transform.stream.StreamSource;
    import javax.xml.validation.Schema;
    import javax.xml.validation.SchemaFactory;
    import javax.xml.validation.Validator;
     
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.Node;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXValidator;
    import org.dom4j.io.XMLWriter;
    import org.dom4j.util.XMLErrorHandler;
    import org.xml.sax.SAXException;
     
    import com.ufgov.bank.common.log.*;
     
    public class validateXml {
        private static final SimpleDateFormat sdf2 = new SimpleDateFormat(
                "yyyyMMddHHmmssSSS");
        public boolean validate(String xsdUrl, String xml) throws Exception {
            Date date = new Date();
            LogOperation.writeLog("client","xsd文件路径:"+xsdUrl,sdf2.format(date));
            LogOperation.writeLog("client","xsd校验前的xml:"+xml,sdf2.format(date));
            // 获取Schema工厂类
            // 这里的XMLConstants.W3C_XML_SCHEMA_NS_URI的值就是://http://www.w3.org/2001/XMLSchema
            SchemaFactory factory = SchemaFactory
                    .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            // 获取XSD文件,以流的方式读取到Source中
            // XSD文件的位置相对于类文件位置
            Source schemaSource = new StreamSource(new FileInputStream(xsdUrl));
            Schema schema = factory.newSchema(schemaSource);
            // 这里是将一个DOM树对象转换成流对象,以便对DOM树对象验证
            // 如果是对XML文件进行验证,用FileInputStream即可
            ByteArrayInputStream bais = new ByteArrayInputStream(
                    xml.getBytes("GBK"));
            // 获取验证器,验证器的XML Schema源就是之前创建的Schema
            Validator validator = schema.newValidator();
            XMLErrorHandler errorHandler = new XMLErrorHandler();
            validator.setErrorHandler(errorHandler);
            Source source = new StreamSource(bais);
            // 执行验证
            try {
                validator.validate(source);
                if (errorHandler.getErrors().hasContent()) {
                    List errorlist = errorHandler.getErrors().selectNodes("error");
                    for (int i =   0; i < errorlist.size(); i++) {
     
                        String errorMsg = getErrorMsg(xsdUrl,
                                (Element) errorlist.get(i));
                        if (errorMsg != null) {
                            System.out.println(errorMsg);
                             
                            LogOperation.writeLog("client",errorMsg,sdf2.format(date));
                        }
                    }
                    return false;
                } else {
                    return true;
                }
                 
            } catch (Exception ex) {
                ex.printStackTrace();
                //throw ex;
                return false;
            } finally {
                bais.close();
            }
        }
     
        private static String getErrorMsg(String path, Element errorElement)
                throws Exception {
            String errorContent = errorElement.getText();
            String attribute = "attribute '";
            String strAttrib = "";
            if (errorContent.toLowerCase().indexOf("'data'") >=   0) {
                strAttrib = "dataAttribute";
            } else if (errorContent.toLowerCase().indexOf("'row'") >=   0) {
                strAttrib = "rowAttribute";
            }
            if (errorContent.toLowerCase().indexOf(attribute) >=   0) {
                String tempContent = errorContent.substring(errorContent
                        .toLowerCase().indexOf(attribute) + attribute.length());
                String attributeName = tempContent.substring(  0,
                        tempContent.indexOf("'"));
                Document document = TextReader.ReadXmlFile(new File(path));
                String errorPath = "xs:attributeGroup[@name='" + strAttrib + "']/"
                        + "xs:attribute[@name='" + attributeName + "']/@id";
                Node errorNode = document.getRootElement().selectSingleNode(
                        errorPath);
                return errorNode.getText()+":["+errorContent+"]";
            }
            return null;
        }
     
    }
  • 相关阅读:
    docker 安装 mysql5.7
    docker 安装 redis
    docker 安装 gitlab
    docker 升级到新版本
    logstash 采集springboot 错误日志配置
    图片左下角添加水印
    frida动态修改
    反反frida调试
    IDA插件KeyPatch直接在IDA中修改arm指令
    frida调用制作dex(用于有些对象读取不了)
  • 原文地址:https://www.cnblogs.com/ITinfo/p/5109428.html
Copyright © 2011-2022 走看看