Validar XSD contra W3 XMLSchema.xsd

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

preguntado el 03 de mayo de 12 a las 17:05

1 Respuestas

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 or haz tu propia pregunta.