• XML Schema Validator Class


    这里有一个 XML 架构验证类

    using System;
    using System.Collections;
    using System.IO;
    using System.Xml;
    using System.Xml.Schema;

    namespace RapidTier
    {
        
    /// <summary>
        
    /// Helper class to perform schema validations.
        
    /// </summary>

        public sealed class SchemaValidator
        
    {
            
    #region Private members
            
            
    /// <summary>
            
    /// The schemas that will be used for validation.
            
    /// </summary>

            private ArrayList schemas = new ArrayList(2);

            
    /// <summary>
            
    /// The errors detected during the validation.
            
    /// </summary>

            private ArrayList errors = new ArrayList(5);

            
    /// <summary>
            
    /// Whether the document is valid or not.
            
    /// </summary>

            private bool isValid;

            
    #endregion


            
    #region Constructors

            
    /// <summary>
            
    /// Creates an instance of the SchemaValidator using the document and the schemas.
            
    /// </summary>
            
    /// <param name="document">The document to validate.</param>
            
    /// <param name="schemas">A list of schemas to validate the document against.</param>

            public SchemaValidator( string document, params Stream[] schemas )
            
    {
                
    this.schemas.Add( document );
                
    foreach(Stream s in schemas)
                
    {
                    
    this.schemas.Add( s );
                }

                isValid 
    = true;
            }


            
    #endregion


            
    #region Public members

            
    /// <summary>
            
    /// Validates the document and returns the result of the validation.
            
    /// </summary>
            
    /// <returns><c>true</c> if the document have succeeded the validation, otherwise <c>false</c>.</returns>

            public bool Validate()
            
    {
                errors.Clear();
                XmlValidatingReader vr 
    = null;
                
    object doc = schemas[0];
                
    if ( doc is Stream)
                
    {
                    vr 
    = new XmlValidatingReader( (Stream)doc, XmlNodeType.Element, null );
                }

                
    else if ( doc is String )
                
    {
                    vr 
    = new XmlValidatingReader( (string)doc, XmlNodeType.Element, null );
                }


                
    try
                
    {
                    
    for(int i=1;i<schemas.Count;i++)
                    
    {
                        vr.Schemas.Add( 
    nullnew XmlTextReader( (Stream)schemas[i] ) );
                    }


                    vr.ValidationEventHandler 
    += new System.Xml.Schema.ValidationEventHandler(ValidationEventHandler);
                
                    
    while( vr.Read() );
                    
    return isValid;
                }

                
    finally
                
    {
                    vr.Close();
                }

            }


            
    /// <summary>
            
    /// Contains the validation errors encountered in the last validation operation.
            
    /// </summary>

            public ValidationEventArgs[] Errors
            
    {
                
    get 
                

                    
    return (ValidationEventArgs[])errors.ToArray(typeof(ValidationEventArgs) ); 
                }

            }


            
    /// <summary>
            
    /// Helper method to capture the event handlers.
            
    /// </summary>
            
    /// <param name="sender">The sender of the event.</param>
            
    /// <param name="e">The information about the event.</param>

            private void ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs e)
            
    {
                errors.Add( e );
                
    if ( e.Severity == XmlSeverityType.Warning )
                
    {
                    
    return;
                }

                isValid 
    = false;
            }


            
    #endregion

        }

    }

  • 相关阅读:
    [Typescript] Augmenting Modules with Declarations
    [Postgres] On conflict Do Something Clause in Postgres
    [React] Debug Custom React Hooks With useDebugValue
    为什么不推荐通过Executors直接创建线程池
    JAVA线程池使用注意事项
    Java线程池使用的注意事项
    分布式事务(六)总结提高
    分布式事务(五)源码详解
    分布式事务(三)mysql对XA协议的支持
    分布式事务(二)Java事务API(JTA)规范
  • 原文地址:https://www.cnblogs.com/bingyun84/p/2087448.html
Copyright © 2020-2023  润新知