Skip to content

Instantly share code, notes, and snippets.

@Fhernd
Created June 4, 2016 02:09
Show Gist options
  • Save Fhernd/aa589370fdc3a6b1016760221fb429b4 to your computer and use it in GitHub Desktop.
Save Fhernd/aa589370fdc3a6b1016760221fb429b4 to your computer and use it in GitHub Desktop.
Validador de archivos XML a través de un esquema.
using System;
using System.Xml;
using System.Xml.Schema;
namespace Recetas.CSharp.R0608
{
public class Validador
{
// Campo centinela en caso de fallas en el validador:
private bool fallo;
public bool Fallo
{
get
{
return fallo;
}
}
///<summary>
/// Valida un documento XML respecto a un esquema de conformidad.
///</summary>
public bool ValidarXml(string nombreArchivoXml, string nombreArchivoEsquema)
{
// Configuración del tipo de validación:
XmlReaderSettings configEsquema = new XmlReaderSettings();
configEsquema.ValidationType = ValidationType.Schema;
// Carga del archivo de esquema:
XmlSchemaSet esquema = new XmlSchemaSet();
configEsquema.Schemas = esquema;
// Especificación del archivo de esquema:
esquema.Add(null, nombreArchivoEsquema);
// Manejador de eventos de error:
configEsquema.ValidationEventHandler += ManejadorEventosValidacion;
// Creación del lector de validación:
XmlReader validador = XmlReader.Create(nombreArchivoXml, configEsquema);
fallo = false;
try
{
// Lectura de todo el contenido del archivo XML:
while(validador.Read()){}
}
catch(XmlException error)
{
// Generación de excepción que responde a errores
// sintácticos en el documento XML:
Console.WriteLine ("Un error crítico ha ocurrido. Revise la sintaxis del documento XML.");
Console.WriteLine (error.Message);
fallo = true;
}
finally
{
validador.Close();
}
return !fallo;
}
// Manejador de los eventos de error en la validación del
// documento XML frente al esquema:
private void ManejadorEventosValidacion(object sender, ValidationEventArgs args)
{
fallo = true;
// Muestra error de validación:
Console.WriteLine ("Error de validación: {0}", args.Message);
Console.WriteLine ();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment