示例#1
0
        public void XmlProcessorTest()
        {
            using (XmlTextReader reader = new XmlTextReader("SqlMap_Test_Configure.config"))
            {
                IConfigurationStore store = new DefaultConfigurationStore();

                using (XmlConfigProcessor processor = new XmlConfigProcessor())
                {
                    processor.Process(reader, store);

                    CheckResource(store);
                }
            }
        }
        /// <summary>
        /// Should obtain the contents from the resource,
        /// interpret it and populate the <see cref="IConfigurationStore"/>
        /// accordingly.
        /// </summary>
        /// <param name="configurationStore">The store.</param>
        public override void ProcessResource(IConfigurationStore configurationStore)
        {
            Contract.Require.That(configurationStore, Is.Not.Null).When("retrieve argument configurationStore in ProcessResource method");
            Contract.Assert.That(Resource, Is.Not.Null).When("process Resource in ConfigurationInterpreter");

            using (Resource)
            {
                //validateSqlMap字段的有无,决定了是否进行文件规范格式的检查
                IConfiguration setting = configurationStore.Settings[ConfigConstants.ATTRIBUTE_VALIDATE_SQLMAP];
                if(setting !=null)//不为空,检查格式
                {
                    bool mustValidate = false;
                    Boolean.TryParse(setting.Value, out mustValidate);//进一步确定是否必须检查
                    if (mustValidate)
                    {
                        XmlDocument document = new XmlDocument();
                        document.Load(Resource.Stream);
                        //调用规范检查类
                        SchemaValidator.Validate(document.ChildNodes[1], "SqlMapConfig.xsd");             
                    }                    
                }

                Resource.Stream.Position = 0; 
                using (XmlTextReader reader = new XmlTextReader(Resource.Stream))
                {
                    //具体到真正处理配置文件的类对象上
                    using (XmlConfigProcessor processor = new XmlConfigProcessor())
                    {
                        processor.Process(reader, configurationStore);
                    }
                }
            }

            if (logger.IsInfoEnabled)
            {
                logger.Info("Configuration Store");
                logger.Info(configurationStore.ToString());
            }
        }