zoukankan      html  css  js  c++  java
  • xsd 进行判断config是否符合规则

    //----------------------------------------------------------------
    // <copyright file="ConfigFileLoader.cs" company="Microsoft">
    //    Copyright (c) Microsoft Corporation.  All rights reserved.
    // </copyright>
    // <summary>Check and load configuration file.</summary>
    //----------------------------------------------------------------
    namespace Microsoft.Msn.Tokyo.C3.Ifw.IO
    {
        using System;
        using System.Collections.ObjectModel;
        using System.IO;
        using System.Xml;
        using System.Xml.Linq;
        using System.Xml.Schema;
        using Microsoft.Msn.Tokyo.C3;
        using Microsoft.Msn.Tokyo.C3.Config;
    
        /// <summary>
        /// Check and load configuration file.
        /// </summary>
        public static class ConfigFileLoader
        {
            /// <summary>
            /// Check and load configuration file.
            /// </summary>
            /// <param name="configFilePath">The fully qualified name of the configuration file, or the relative configuration file name.</param>
            /// <param name="xmlSchema">Xml schema for the configuration file.</param>
            /// <returns>config contents</returns>
            /// <exception cref="Microsoft.Msn.Tokyo.C3.Config.ConfigFileNotFoundException">The config file specified by path does not exist. </exception>
            /// <exception cref="Microsoft.Msn.Tokyo.C3.Config.C3ConfigurationException">Invalid config file.</exception>
            public static XmlDocument LoadConfig(string configFilePath, string xmlSchema)
            {
                try
                {
                    /* ファイルの存在チェック */
                    if (!File.Exists(configFilePath))
                    {
                        throw new ConfigFileNotFoundException(configFilePath);
                    }
    
                    /* Xsdをリソースから読み込み */
                    XmlSchemaSet schemeSet = new XmlSchemaSet();
                    using (StringReader reader = new StringReader(xmlSchema))
                    {
                        schemeSet.Add(null, XmlReader.Create(reader));
                    }
    
                    XDocument doc = XDocument.Load(configFilePath);
                    Collection<InvalidConfigValueException> validationExceptions = new Collection<InvalidConfigValueException>();
                    /* Xmlの妥当性チェック */
                    doc.Validate(
                        schemeSet,
                        (sender, e) =>
                        {
                            XObject xo = sender as XObject;
                            if (xo != null)
                            {
                                /* ノードの場合 */
                                if (xo.NodeType == XmlNodeType.Element)
                                {
                                    XElement xe = xo as XElement;
                                    if (xe != null)
                                    {
                                        validationExceptions.Add(new InvalidConfigValueException(xe.Name.ToString(), string.Empty, e.Exception));
                                    }
                                }
    
                                /* 属性の場合 */
                                else if (xo.NodeType == XmlNodeType.Attribute)
                                {
                                    XAttribute xa = xo as XAttribute;
                                    if (xa != null)
                                    {
                                        validationExceptions.Add(new InvalidConfigValueException(xo.Parent.Name.ToString(), xa.Value, e.Exception));
                                    }
                                }
    
                                /* ノード・属性以外の場合 */
                                else
                                {
                                    validationExceptions.Add(new InvalidConfigValueException(e.Message, e.Exception));
                                }
                            }
                        },
                        true);
    
                    /* スキーマエラーがある場合 */
                    if (validationExceptions.Count > 0)
                    {
                        string message = string.Empty;
    
                        foreach (InvalidConfigValueException e in validationExceptions)
                        {
                            message += e.ToString() + Environment.NewLine;
                        }
    
                        throw new C3ConfigurationException(message, 4);
                    }
    
                    /* XDocument⇒XmlDocument型変換 */
                    XmlDocument xmlDocument = new XmlDocument();
                    using (XmlReader reader = doc.CreateReader())
                    {
                        reader.MoveToContent();
                        xmlDocument.Load(reader);
                    }
    
                    return xmlDocument;
                }
                catch (Exception ex)
                {
                    if (ex is C3Exception)
                    {
                        throw;
                    }
                    else
                    {
                        throw new C3Exception(null, ex);
                    }
                }
            }
        }
    }
    <?xml version="1.0" encoding="utf-8" ?>
    <!--isCheck:1 start check thread. checkTime:check thread start every second value. waitRemoverTime:force kill Process until commit over. killRemoverTime:force kill Process    -->
    <Remover isCheck="1" checkTime="300" waitRemoveTime="150000" killRemoveTime="153000" threadNum="4" >
        <Items>
            <!-- get unnecessary image count-->
            <Item isErrorRollback="true">
                <ExecuteProcedure name="spAutosRemoverGetUnnecessaryImageCount" dbConnectionKeyName="BackEndC3ChannelDBConnectionKey" return="List1">
                </ExecuteProcedure>
            </Item>
            <!-- 中古車物件画像削除処理-->
            <Item isErrorRollback="true">
                <ExecuteProcedure name="spAutosRemoverGetUnnecessaryUsedcarImageFilePath" dbConnectionKeyName="BackEndC3ChannelDBConnectionKey" return="List1">
                    <Parameter key="@prmCount" value="120000"/>
                    <Parameter key="@prmCommitCount" value="1000"/>
                </ExecuteProcedure>
                <DeleteFile removeObjectKey="List1:0" isDeleteTarget="true" rootDirectry="%ImageStorePath%\ca006" isDirectry="false" backupTo="" />
            </Item>
            <!--中古車複数点画像削除処理-->
            <Item isErrorRollback="true">
                <ExecuteProcedure name="spAutosRemoverGetUnnecessaryImageFilePath" dbConnectionKeyName="BackEndC3ChannelDBConnectionKey" return="List2">
                    <Parameter key="@prmCount" value="200000"/>
                    <Parameter key="@prmCommitCount" value="1000"/>
                </ExecuteProcedure>
                <DeleteFile removeObjectKey="List2:0" isDeleteTarget="true" rootDirectry="%ImageStorePath%\ca007" isDirectry="false" backupTo="" />
            </Item>
            <!--販売店画像削除処理-->
            <Item isErrorRollback="false">
                <ExecuteProcedure name="spAutosRemoverGetCustomerCode" dbConnectionKeyName="BackEndC3ChannelDBConnectionKey" return="List3"/>
                <DeleteFile removeObjectKey="List3:0" isDeleteTarget="false" rootDirectry="%ImageStorePath%\ca009" isDirectry="true" backupTo="" />
            </Item>
            <!--DBに物件画像削除情報の物理削除処理-->
            <Item isErrorRollback="true">
                <ExecuteProcedure name="spAutosRemoverDeleteUnnecessaryImageRecord" dbConnectionKeyName="BackEndC3ChannelDBConnectionKey" >
                    <Parameter key="@deletePreviousDays" value="60" />
                </ExecuteProcedure>
            </Item>
            <!-- ジョブワークファイル削除処理-->
            <Item isErrorRollback="false">
                <DeleteFile saveDays="10" isDeleteTarget="true" rootDirectry="%WorkFolderRootPath%\AU001" isDirectry="false" backupTo="" />
                <DeleteFile saveDays="7" isDeleteTarget="true" rootDirectry="%WorkFolderRootPath%\AU002" isDirectry="false" backupTo="" />
            </Item>
            <!-- 反響ログファイル削除処理-->
            <Item isErrorRollback="true">
                <ExecuteProcedure name="spAutosRemoverUpdateAutosFileHistoryStatus" dbConnectionKeyName="C3CommonConnectionStringKey" return="List4"/>
                <DeleteFile removeObjectKey="List4:0" isDeleteTarget="true" rootDirectry="%VirtualFileRootPath%" isDirectry="false" backupTo="" />
            </Item>
        </Items>
    </Remover>
    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="Remover" type="RemoverType">
        </xs:element>
        <xs:complexType name="RemoverType">
            <xs:sequence>
                <xs:element name="Items" minOccurs="1" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Item" minOccurs="1" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:choice minOccurs="0" maxOccurs="unbounded">
                                        <xs:element name="ExecuteProcedure">
                                            <xs:complexType>
                                                <xs:sequence>
                                                    <xs:element name="Parameter" minOccurs="0" maxOccurs="unbounded">
                                                        <xs:complexType>
                                                            <xs:attribute name="value" type="xs:string" use="required" />
                                                            <xs:attribute name="key" type="xs:string" use="required" />
                                                        </xs:complexType>
                                                    </xs:element>
                                                </xs:sequence>
                                                <xs:attribute name="name" type="xs:string" use="required" />
                                                <xs:attribute name="dbConnectionKeyName" type="xs:string" use="required" />
                                                <xs:attribute name="return" type="xs:string" use="optional" />
                                            </xs:complexType>
                                        </xs:element>
                                        <xs:element name="DeleteFile">
                                            <xs:complexType>
                                                <xs:attribute name="removeObjectKey" type="xs:string" use="optional" />
                                                <xs:attribute name="saveDays" type="xs:string" use="optional" />
                                                <xs:attribute name="isDeleteTarget" type="xs:boolean" use="required" />
                                                <xs:attribute name="rootDirectry" type="xs:string" use="optional" />
                                                <xs:attribute name="isDirectry" type="xs:boolean" use="required" />
                                                <xs:attribute name="backupTo" type="xs:string" use="optional" />
                                            </xs:complexType>
                                        </xs:element>
                                    </xs:choice>
                                    <xs:attribute name="isErrorRollback" type="xs:boolean" use="optional" />
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:attribute name="isCheck" type="xs:string" use="required"></xs:attribute>
            <xs:attribute name="checkTime" type="xs:string" use="required"></xs:attribute>
            <xs:attribute name="waitRemoveTime" type="xs:string" use="required"></xs:attribute>
            <xs:attribute name="killRemoveTime" type="xs:string" use="required"></xs:attribute>
            <xs:attribute name="threadNum" type="xs:string" use="required"></xs:attribute>
        </xs:complexType>
    </xs:schema>
  • 相关阅读:
    MSSQL大量数据时,建立索引或添加字段后保存更改超时该这么办
    POJ 3261 Milk Patterns (后缀数组)
    POJ 1743 Musical Theme (后缀数组)
    HDU 1496 Equations (HASH)
    694. Distinct Substrings (后缀数组)
    POJ 1222 EXTENDED LIGHTS OUT (枚举 或者 高斯消元)
    POJ 1681· Painter's Problem (位压缩 或 高斯消元)
    POJ 1054 The Troublesome Frog (hash散列)
    HDU 1716 排列2
    HDU 4405 Aeroplane chess (概率DP & 期望)
  • 原文地址:https://www.cnblogs.com/2814/p/2812955.html
Copyright © 2011-2022 走看看