Validar XSD contra W3 XMLSchema.xsd
Frecuentes
Visto 381 veces
0
¿Alguna sugerencia sobre cómo puedo validar mi XSD?
Me gustaría tener una prueba unitaria que verifique la validez de mi XSD, pero no puedo superar el siguiente error:
"Por razones de seguridad, DTD está prohibido en este documento XML. Para habilitar el procesamiento de DTD, configure la propiedad DtdProcessing en XmlReaderSettings para Parse y pase la configuración al método XmlReader.Create".
Esto parece deberse a que la definición del esquema W3 hace referencia a las DTD.
Esta es la prueba unitaria (xUnit):
namespace MyNamespace.Profile.Test
{
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
using Xunit;
public class ProfilesSchemaTests
{
[Fact]
public void ShouldValidateProfilesXsd()
{
string profilesXsd = "Profiles.xsd";
Assert.DoesNotThrow(() => ValidateXsd(profilesXsd));
}
private static void ValidateXsd(string path)
{
const string W3Schema = "http://www.w3.org/2001/XMLSchema.xsd";
var config = new XmlReaderSettings { ValidationType = ValidationType.Schema };
config.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
config.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
config.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
config.DtdProcessing = DtdProcessing.Parse;
config.XmlResolver = null;
config.ValidationEventHandler += ValidationCallBack;
config.Schemas.Add(null, W3Schema);
using (var reader = XmlReader.Create(path, config))
{
while (reader.Read())
{
}
}
}
private static void ValidationCallBack(object sender, ValidationEventArgs validationEventArgs)
{
Console.WriteLine(
validationEventArgs.Severity == XmlSeverityType.Warning
? "\tWarning: Matching schema not found. No validation occurred. {0}"
: "\tValidation error: {0}",
validationEventArgs.Message);
}
}
}
1 Respuestas
0
Más en la Foros de MSDN Tenía una muy buena sugerencia: use XmlSchemaSet.Compile ya que esto valida.
Respondido 06 Jul 12, 09:07
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# xsd or haz tu propia pregunta.