中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > .NET > 临时文章
XML Schema Validator Class (from UABv2.0)
作者:未知 时间:2005-07-27 21:44 出处:CSDN 责编:chinaitpower
              摘要:XML Schema Validator Class (from UABv2.0)

这里有一个 XML 架构验证类,摘自 Microsoft Updater Application Block v2.0

源码:

//============================================================================================================
// Microsoft Updater Application Block for .NET
//  http://msdn.microsoft.com/library/en-us/dnbda/html/updater.asp
// 
// SchemaValidator.cs
//
// Contains the implementation of the schema validator.
//
// For more information see the Updater Application Block Implementation Overview.
//
//============================================================================================================
// Copyright ?Microsoft Corporation.  All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS FOR A PARTICULAR PURPOSE.
//============================================================================================================

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

namespace Microsoft.ApplicationBlocks.Updater.Utilities
{
 /// <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( null, new 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
 }
}

使用:

  /// <summary>
  /// Download and validates the manifest using the Uri location.
  /// </summary>
  /// <param name="type">The type that represents the manifest class.</param>
  /// <param name="location">The location of the manifest.</param>
  /// <param name="schemaResource">The resource where the embedded XSD resides in the assembly.</param>
  /// <returns>The Manifest instance.</returns>
  [SecurityPermission(SecurityAction.Demand, SerializationFormatter=true)]
  private object ValidateAndDeserialize( Type type, Uri location, string schemaResource )
  {
   object result = null;
   try
   {
    string doc = DownloadFile( location );
    using ( Stream schema = Assembly.GetExecutingAssembly().GetManifestResourceStream( schemaResource ) )
    {
     SchemaValidator validator = new SchemaValidator( doc, schema );
     if ( !validator.Validate() )
     {
      Logger.LogAndThrowException( new ApplicationUpdaterException( Resource.ResourceManager[ Resource.MessageKey.ManifestSchemaError, location, schemaResource ] ) );
     }

     XmlSerializer xser = new XmlSerializer( type );
     result = xser.Deserialize( new XmlTextReader( doc, XmlNodeType.Document, null) );
    }
   }
   catch( Exception ex )
   {
    Logger.LogAndThrowException( ex );
   }

   return result;
  }


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有