Hola a todos, estoy intentando validar un archivo XML contra un esquema XSD y le introduzco al XML elementos y atributos que no están en el esquema y no detecta los errores, os pongo el código a ver si veis algo que yo no conozco o no veo
1) el XML alterado (region ...)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Empleados>
<Empleado Departamento="Contabilidad" lio="uno">
<Nombre>Alberto</Nombre>
<Apellidos>Urdiales</Apellidos>
<region>Castilla la mancha</region>
</Empleado>
<Empleado Departamento="Tesoreria">
<Nombre>Joaquín</Nombre>
<Apellidos>Kremel</Apellidos>
</Empleado>
</Empleados>
2) El esquema
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Empleados"
targetNamespace="http://tempuri.org/Empleados.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/Empleados.xsd"
xmlns:mstns="http://tempuri.org/Empleados.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Empleados">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Empleado">
<xs:complexType>
<xs:sequence>
<xs:element name="Nombre" type="xs:string" />
<xs:element name="Apellidos" type="xs:string" />
</xs:sequence>
<xs:attribute name="Departamento" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
3) El validador Windows
private void btnValidaEmpleados_click(object sender, RoutedEventArgs e){
XmlReaderSettings EmpsSettings = new XmlReaderSettings();
string salida = System.IO.Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory + "../../XML/Empleados.xsd");
EmpsSettings.Schemas.Add(null, salida);
EmpsSettings.ValidationType = ValidationType.Schema;
EmpsSettings.ValidationEventHandler += new ValidationEventHandler(EmpsSettings_ValidationEventHandler1);
string salida2 = System.IO.Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory + "../../XML/Empleados.xml");
XmlReader emp = XmlReader.Create(salida2, EmpsSettings);
while (emp.Read()) { }
}
private void EmpsSettings_ValidationEventHandler1(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
MessageBox.Show("WARNING: " + e.Message);
}
else if (e.Severity == XmlSeverityType.Error)
{
MessageBox.Show("ERROR: " + e.Message);
}
}
a ver si veis el fallo, yo ya lo he intentado con otros modelos y siempre me falla no se dispara el evento
un saludo