Quantcast
Channel: validación de un archivo XML con un esquema
Viewing all articles
Browse latest Browse all 3

validación de un archivo XML con un esquema

$
0
0

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


Viewing all articles
Browse latest Browse all 3

Latest Images

Trending Articles





Latest Images