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);
}
}
}
}