Tengo un archivo XML con una ubicación de esquema especificada como esta:
xsi:schemaLocation="someurl ..\localSchemaPath.xsd"
Quiero validar en C #. Visual Studio, cuando abro el archivo, lo valida contra el esquema y enumera los errores perfectamente. Sin embargo, de alguna manera, parece que no puedo validarlo automáticamente en C # sin especificar el esquema para validar de esta manera:
XmlDocument asset = new XmlDocument();
XmlTextReader schemaReader = new XmlTextReader("relativeSchemaPath");
XmlSchema schema = XmlSchema.Read(schemaReader, SchemaValidationHandler);
asset.Schemas.Add(schema);
asset.Load(filename);
asset.Validate(DocumentValidationHandler);
¿No debería poder validar con el esquema especificado en el archivo XML automáticamente? Qué me estoy perdiendo ?
Respuestas:
Debe crear una instancia de XmlReaderSettings y pasarla a su XmlReader cuando la cree. Luego, puede suscribirse a
ValidationEventHandler
la configuración para recibir errores de validación. Su código terminará luciendo así:fuente
using
la cláusula de integridad :)settings.ValidationEventHandler += (o, args) => { errors = true; // More code };
Una forma más simple, si está utilizando .NET 3.5, es usar
XDocument
yXmlSchemaSet
validar.Consulte la documentación de MSDN para obtener más ayuda.
fuente
<catalog><![CDATA[my <i> new </i> catalog....]]></catalog>
es la forma correcta de hacer eso.El siguiente ejemplo valida un archivo XML y genera el error o advertencia apropiado.
El ejemplo anterior usa los siguientes archivos de entrada.
books.xsd
fuente
personalmente estoy a favor de validar sin una devolución de llamada:
(ver la publicación de Timiz0r en Validación de esquema XML síncrono? .NET 3.5 )
fuente
Tuve que hacer este tipo de validación automática en VB y así es como lo hice (convertido a C #):
Luego me suscribí al
settings.ValidationEventHandler
evento mientras leía el archivo.fuente