Как записать все ошибки на исключение в C #, а затем показать? - PullRequest
1 голос
/ 03 октября 2011


Я написал некоторый код в формах окон C #, привязанный к кнопке проверки.
Код здесь: моя кнопка подтверждения . Код проверяет проверку XML-файла с помощью схемы XSD. Если возникает исключение, оно выбрасывает текст исключения в текстовое поле, и программа останавливает проверку. Я хотел бы записать ошибки / исключения в нечто вроде массива, а затем распечатать ошибки в текстовом поле.
Как это сделать?

private void validateButton_Click(object sender, System.EventArgs e)
{
    resultTextBox.Text = String.Empty;
    if (ValidateForm())
    {
        try
        {
            Cursor.Current = Cursors.WaitCursor;
            XmlSchemaSet schemaSet = new XmlSchemaSet();
            schemaSet.Add(String.Empty, XmlReader.Create(new StreamReader(xmlSchemaFileTextBox.Text)));

            XmlReaderSettings settings = new XmlReaderSettings();
            settings.Schemas = schemaSet;
            settings.ValidationType = ValidationType.Schema;

            XmlReader reader = XmlReader.Create(new StringReader(inputXmlTextBox.Text), settings);

            while (reader.Read()) { }

            resultTextBox.Text = "The XML file is OK :)" +
                Environment.NewLine +
                DateTime.Now.ToLongDateString();
        }
        catch (XmlSchemaException schemaEx)
        {
            resultTextBox.Text = "The XML file is invalid:" +
                Environment.NewLine +
                schemaEx.LineNumber +
                ": " +
                schemaEx.Message;
        }
        catch (Exception ex)
        {
            resultTextBox.Text = ex.ToString();
        }
        finally
        {
            Cursor.Current = Cursors.Default;
        }
    }
    else
    {
        MessageBox.Show(null, "You have to load XML and XSD files to validate.", "There's XML file reading error.", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

Ответы [ 2 ]

0 голосов
/ 03 октября 2011

Вы должны открыть XmlReader с помощью объекта XmlReaderSettings и использовать ValidationEventHandler для обнаружения ошибок и сообщения о них пользователю.

См. Полную документацию и рабочий пример по адресу: XmlReaderSettings.ValidationEventHandler Event

в основном напишите что-то вроде этого:

using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;

public class ValidXSD {

  public static void Main() {

    // Set the validation settings.
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
    settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
    settings.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);

    // Create the XmlReader object.
    XmlReader reader = XmlReader.Create("inlineSchema.xml", settings);

    // Parse the file. 
    while (reader.Read());

  }

  // Display any warnings or errors.
  private static void ValidationCallBack (object sender, ValidationEventArgs args) {
     if (args.Severity==XmlSeverityType.Warning)
       Console.WriteLine("\tWarning: Matching schema not found.  No validation occurred." + args.Message);
     else
        Console.WriteLine("\tValidation error: " + args.Message);

  }  
}
0 голосов
/ 03 октября 2011

Если вы хотите показать исключение пользователю вашего приложения, вы можете использовать ExceptionMessageBox.

try {
  throw new ApplicationException("test");
}
catch (ApplicationException ex)
{   
  ExceptionMessageBox box = new ExceptionMessageBox(ex);
  box.Show(this);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...