DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> XML Schema Validator Class (from UABv2.0) - asp.net
XML Schema Validator Class (from UABv2.0) - asp.net
編輯:XML詳解     

這裡有一個 XML 架構驗證類,摘自 。

源碼:

//============================================================================================================
// Microsoft Updater Application Block for .Net
// 
// 
// 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;
  }


XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved