您的位置:首页 > 其它

xsd 进行判断config是否符合规则

2012-12-11 15:03 134 查看
//----------------------------------------------------------------
// <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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: