jueves, 7 de octubre de 2010

XML Problemas Validacion

Al realizar una validación de XML tuve un problema al usar el código de ejemplo de microsoft, al leer un archivo de XML,
Este es el código que pueden encontrar en el ejemplo dado por microsoft
Emanuel Soto

Emanuel Soto



    // Create the XmlSchemaSet class.
    XmlSchemaSet sc = new XmlSchemaSet();

    // Add the schema to the collection.
    sc.Add("urn:bookstore-schema", "books.xsd");

    // Set the validation settings.
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.Schemas = sc;
    settings.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);
 
    // Create the XmlReader object.
    XmlReader reader = XmlReader.Create("booksSchemaFail.xml", settings);

    // Parse the file. 
    while (reader.Read());
Este código me da un error al leer mi xml:
  •  Codificación Unicode, usando XMLParseContext puedes solucionar este problema, referencia.
Una vez que se usa Unicode sale un error al leer el xml
  • Error Message: Data at the root level is invalid. Line 1, position 1.
Para solucionar el problema use el siguiente código.
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.ValidationType = ValidationType.Schema;
                sc.Add("urn:bookstore-schema", "books.xsd");
                settings.IgnoreWhitespace = true;
                settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings;
                settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
                using(StreamReader sr = new StreamReader("booksSchemaFail.xml"))
                {
                    using(XmlReader reader = XmlReader.Create(new StringReader(sr.ReadToEnd()),settings))
                    {
                        while (reader.Read());
                    }
                }

Emanuel Soto

Emanuel Soto



Emanuel Soto

Emanuel Soto


Emanuel Soto


Emanuel Soto


Emanuel Soto