• C# Schema验证Xml的若干种方法


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Xml.Schema;
    using System.Xml;
    using System.IO;
    namespace MyClass1
    {
        public class TestSchema
        {
            private static string Namespace = "http://www.beyondbit.com";
            private static bool isValid = true;
            public static bool ValidationSchema(string filename)
            {
                XmlTextReader r = new XmlTextReader(filename);
                XmlValidatingReader v = new XmlValidatingReader(r);
                v.ValidationType = ValidationType.Schema;
                v.ValidationEventHandler += new ValidationEventHandler(MyValidationEventHandler);
                while (v.Read())
                {
                    // Can add code here to process the content.
                }
                v.Close();
                return isValid;
            }
            public static bool ValidationSchemaNew(string filename, string schema)
            {
                XmlSchemaSet xsSet = new XmlSchemaSet();
                try
                {
                    xsSet.Add(Namespace, schema);
                }
                catch(Exception ex) {
                    string a = ex.Message;
                    return false;
                }
                // 定义公文模式的使用方式
                XmlReaderSettings xrSetting = new XmlReaderSettings();
                xrSetting.ValidationType = ValidationType.Schema;
                // 关联验证读取器与架构集合
                xrSetting.Schemas = xsSet;
                // 添加发生错误时的事件处理程序
                xrSetting.ValidationEventHandler += new ValidationEventHandler(MyValidationEventHandler);
                // 使用最新的方式来构建可进行校验的读取器并构造验证读取器
                XmlReader xr = XmlReader.Create(filename, xrSetting);
                // 循环检测所有的文档节点
                while (xr.Read())
                {
                }
                xr.Close();
                return isValid;
            }
            public static bool ValidationSchemaNow(string xmlstring, string schemastring)
            {
                //构建待验证数据的XmlReader对象
                XmlReader xmlDataReader = XmlTextReader.Create(new StringReader(xmlstring));
                //构建标准的XmlReader对象
                XmlReader xmlSchemaReader = XmlTextReader.Create(new StringReader(schemastring));
                // 定义公文模式的使用方式
                XmlReaderSettings xrSetting = new XmlReaderSettings();
                try
                {
                    xrSetting.Schemas.Add(null, xmlSchemaReader);
                }
                catch (System.Xml.Schema.XmlSchemaException ex)
                {
                    string b = ex.Message;
                    return false;
                }
                xrSetting.ValidationType = ValidationType.Schema;
                xrSetting.ValidationEventHandler += new ValidationEventHandler(MyValidationEventHandler);
                XmlReader xr = XmlReader.Create(xmlDataReader, xrSetting);
                while (xr.Read())
                {
                }
                xr.Close();
                return isValid;
            }
            /// <summary>
            /// 验证处理
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="args"></param>
            private static void MyValidationEventHandler(object sender, ValidationEventArgs args)
            {
                if (args.Severity == XmlSeverityType.Warning)
                {
                    WriteErrorLogs("Validation Warning:   " + args.Message);
                }
                else
                {
                    WriteErrorLogs("Validation Error:   " + args.Message);
                }
                isValid = false;
            }
            /// <summary>
            /// 记录错误日志
            /// </summary>
            /// <param name="ss"></param>
            private static void WriteErrorLogs(string ss)
            {
                StreamWriter sw = null;
                try
                {
                    sw = new StreamWriter(@"C:\test_error.txt", true, Encoding.UTF8);
                    sw.WriteLine("[" + DateTime.Now.ToString() + "]" + ss);
                    sw.Flush();
                    sw.Close();
                }
                catch { sw.Close(); }
            }
        }

    以上方法摘自网上,下边的方法是在项目中经过实践的:

     public class SchemaValidationHelper
        {
    
            public string ErrorMessage { get; set; }
            public event ValidationEventHandler ValidationHandler;
    
            public bool CheckValidate(Stream xmlStream, XmlSchemaSet xmlSchemaSet)
            {
                if (xmlStream.Length > 0)
                {
                    XmlDocument doc = new XmlDocument();
                    xmlStream.Position = 0;
                    doc.Load(xmlStream);
                    StringBuilder sb = new StringBuilder();
    
                    ValidationEventHandler eventHandler = new ValidationEventHandler(delegate(object subSender, ValidationEventArgs subE)
                    {
                        switch (subE.Severity)
                        {
                            case XmlSeverityType.Error:
                                sb.Append(subE.Message);
                                break;
                            case XmlSeverityType.Warning:
                                break;
                        }
                    });
                    doc.Schemas = xmlSchemaSet;
                    if (ValidationHandler != null)
                    {
                        doc.Validate(ValidationHandler);
                    }
                    else
                    {
                        //Check xml  
                        doc.Validate(eventHandler);
                    }
                    //If has error ,return false 
                    if (sb.Length > 0)
                    {
                        ErrorMessage = sb.ToString();
                        return false;
                    }
                }
                else
                {
                    return false;
                }
    
                return true;
    
    
            }
    
    
        }
     SchemaValidationHelper validationHelper = new SchemaValidationHelper();
                validationHelper.ValidationHandler+=new System.Xml.Schema.ValidationEventHandler(ValidationHelper_ValidationHandler);
  • 相关阅读:
    DNS知识点
    云服务镜像模板配置
    CoreDNS域名解析问题
    ingress配置静态资源
    PAGE_SIZE THREAD_SIZE STACKSIZE
    dockerregistry
    内联视图无法发生视图合并的几种情况
    oracle列删除
    ash_top_plsql
    oracle json()函数put优化案例
  • 原文地址:https://www.cnblogs.com/Qiaoyq/p/2671543.html
Copyright © 2020-2023  润新知