none
Проблемы с валидацией XML файлов. RRS feed

  • Вопрос

  • И снова я с моей проблемой. Проблема заключается в том, что когда проверяется xml файл на валидность, даже если есть ошибка в файле, т.е. файл не сходится с схемой, то файл всё равно загружается. Хотя выводит сообщение об ошибке, но всё равно файл загружается.

    Здесь проверяется xml файл с xml схемой на валидность:

    public bool ValidationXml(string xmlFileName)
            {
                bool success = true;
    
                string xsdFile = "../../Part.xsd";
    
                if (xmlFileName != string.Empty)
                {
                    XmlSchemaSet schemaSet = new XmlSchemaSet();
                    schemaSet.Add("http://tempuri.org", xsdFile);
    
                    var settings = new XmlReaderSettings
                    {
                        Schemas = schemaSet,
                        ValidationType = ValidationType.Schema,
                        ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema |
                        XmlSchemaValidationFlags.ProcessSchemaLocation |
                        XmlSchemaValidationFlags.ReportValidationWarnings
                    };
    
                    settings.ValidationEventHandler += new ValidationEventHandler(PartValidationsEventHandler);
    
                    using (XmlReader xmlReader = XmlReader.Create(xmlFileName, settings))
                    {
                        while (xmlReader.Read())
                        {
                            success = true;
                        }
                    }
                }
    
                return success;
            }
    
            public void PartValidationsEventHandler(object sender, ValidationEventArgs args)
            {
                if (args.Severity == XmlSeverityType.Warning)
                {
                    MessageBox.Show(args.Message, "Warning Information", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else if (args.Severity == XmlSeverityType.Error)
                {
                    MessageBox.Show(args.Message, "Error Information", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

    Далее вызов метода:

    bool success = m_controller.ValidationXml(_projectFolder);
    
     if (success)
        m_controller.Load(_projectFolder);

    Когда к примеру вместо цифры какая нибудь буква, то файл не загружается, а вот если отсутствует какой нибудь элемент, который указан в схеме, то выводит сообщение что не хватает определённого элемента, но файл всё равно загружается. Подскажите пожалуйста что я делаю не правильно. Как запретить загрузку файла если не хватает элемента?




    • Изменено nigina_1989 4 января 2013 г. 11:30
    4 января 2013 г. 11:24

Ответы

  • Заведите в классе поле, что-то вроде bool isWarningLogged. Выставляйте его в true в PartValidationsEventHandler. Из ValidationXml возвращайте success && !isWarningLogged.
    • Помечено в качестве ответа nigina_1989 4 января 2013 г. 12:53
    4 января 2013 г. 12:37
    Модератор

Все ответы

  • Заведите в классе поле, что-то вроде bool isWarningLogged. Выставляйте его в true в PartValidationsEventHandler. Из ValidationXml возвращайте success && !isWarningLogged.
    • Помечено в качестве ответа nigina_1989 4 января 2013 г. 12:53
    4 января 2013 г. 12:37
    Модератор
  • PashaPash спасибо большое, заработало, теперь если отсутствует какой нибудь элемент, файл не открывается. Ещё раз спасибо.
    4 января 2013 г. 12:53