У меня есть метод, который проверяет XML на соответствие XSD, в котором я пытаюсь передать несколько записей. При обработке исключений я получаю только первое возникшее исключение в виде сообщения. как получить все ссылки на ошибки?

    public static bool Validate(string sFileXML, string sFileXSD)
    {
        try
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.Schemas.Add(null, sFileXSD);
            settings.ValidationType = ValidationType.Schema;
            XmlDocument document = new XmlDocument();
            document.Load(sFileXML);
            XmlReader objReader = XmlReader.Create(new StringReader(document.InnerXml), settings);
            while (objReader.Read()) 
            {
            }
            return true;
        }
        catch (Exception eException)
        {
            Console.WriteLine(eException.Message);
            return false;
        }
    }
0
Milan Tripathi 3 Фев 2015 в 11:45

2 ответа

Лучший ответ

Вы можете установить ValidationEventHandler на XmlReaderSettings. Это даст вам возможность обрабатывать каждое событие и исключение при чтении XML.

{{X0} } имеет свойство Exception, которое содержит исключение проверки XML.

2
Patrick Hofman 3 Фев 2015 в 08:51

Я не уверен, что это то, что вы ищете, но вы можете использовать Try-Catch в цикле:

public static bool Validate(string sFileXML, string sFileXSD)
{
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.Schemas.Add(null, sFileXSD);
    settings.ValidationType = ValidationType.Schema;
    XmlDocument document = new XmlDocument();
    document.Load(sFileXML);
    XmlReader objReader = XmlReader.Create(new StringReader(document.InnerXml), settings);
    bool success = true, canRead = true;
    while(canRead)
    {
        try
        {
            canRead = objReader.Read();
            // do something else?
        } catch (Exception eException)
        {
            success = false;
            Console.WriteLine(eException.Message);
        }
    }
    return success;
}
2
Tim Schmelter 3 Фев 2015 в 09:03