Main /

Xml Gegen Schema Validieren

Xml Gegen Schema Validieren

/ HomePage / Computer / Software / Programmierung / Schnipsel / C# Schnipsel / Xml gegen Schema Validieren

Validieren einer XML-Datei gegen ein Schema, das als eingebettete Ressource vorliegt

Diese statische Klasse ist in der Lage eine XML-Datei gegen ein Schema zu validieren. Das erledigt die einzige Methode Validate(). Ihr muß der volle Pfad zur XML-Datei und der Ressourcenname des Schemas übergeben werden.

Ist die XML-Datei valide, passiert nichts. Ist sie nicht valide, fliegt eine Exception, die den genauen Grund (mit Zeilennummer etc.) in der Message Property mit sich trägt.

.NET 1.0 und 1.1

using System;
using System.IO;
using System.Reflection;
using System.Xml;
using System.Xml.Schema;

namespace Elsni.ExampleProject {

   /// <summary>
   /// Diese Klasse validiert eine XML-Datei gegen ein Schema
   /// das als eingebettete Ressource vorliegt
   /// </summary>
   public class XmlValidator {

      /// <summary>
      /// Validierung-Methode
      /// </summary>
      /// <param name="filename">Voller Pfad zur der zu validierenden XML-Datei</param>
      /// <param name="schemaResourceName">Name der eigebetten Ressource, die das XML-Schema
      /// enthält</param>
      public static void Validate(string filename, string schemaResourceName) {

         Assembly assembly = Assembly.GetExecutingAssembly();
         // Achtung: folgendes funktioniert nur wenn der Assembly-namen dem Namespace entspricht!
         string resourcePath = assembly.GetName().Name + "." + schemaResourceName;

         using (Stream stream = assembly.GetManifestResourceStream(resourcePath)) {
            XmlReader schemaReader = new XmlTextReader(stream, XmlNodeType.Document, null);
            XmlSchemaCollection schema = new XmlSchemaCollection();
            schema.Add("", schemaReader, null);

            XmlTextReader xml = new XmlTextReader(filename);
            try {
               XmlValidatingReader validator = new XmlValidatingReader(xml);
               validator.ValidationType = ValidationType.Schema;
               validator.Schemas.Add(schema);
               while (validator.Read()) { }
            }
            finally {
               xml.Close();
            }
         }
      }
   }
}

.NET 2.0 und höher

using System;
using System.IO;
using System.Reflection;
using System.Xml;
using System.Xml.Schema;

namespace Elsni.EasyTimeAdmin {


    /// <summary>
    /// Diese Klasse validiert eine XML-Datei gegen ein Schema
    /// das als eingebettete Ressource vorliegt
    /// </summary>
    public class XmlSchemaValidator
    {

        /// <summary>
        /// Validierung-Methode
        /// </summary>
        /// <param name="filename">Voller Pfad zur der zu validierenden XML-Datei</param>
        /// <param name="schemaResourceName">Name der eigebetten Ressource, die das XML-Schema
        /// enthält</param>

        public static void Validate(string filename, string schemaResourceName)
        {
            Assembly assembly = Assembly.GetExecutingAssembly();

            // Hier bitte den eigenen vollen Namespace eintragen
            string resourcePath = "Elsni.MeineTolleAnwendung." + schemaResourceName;

            using (Stream stream = assembly.GetManifestResourceStream(resourcePath))
            {
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.ValidationEventHandler += new ValidationEventHandler(
                    settings_ValidationEventHandler
                );
                settings.ValidationType = ValidationType.Schema;
                settings.Schemas.Add(null,XmlReader.Create(stream));
                if (settings.Schemas.Count > 0)
                {
                    using (XmlReader reader = XmlReader.Create(filename,settings))
                    {
                        while (reader.Read()) {

                        }
                    }
                }
            }
        }

        static void settings_ValidationEventHandler(object sender, ValidationEventArgs e)
        {
            if (e.Severity == XmlSeverityType.Error)
            {
                throw new ApplicationException("Fehler in XML-Konfiguration:\r\n"+e.Message);
            }
        }
    }
}
Frische Änderungen | Menü editieren
zuletzt geändert am 22.02.2008 09:38 Uhr von Elsni
Edit Page | Page History