ValidationEventHandler没有调用

时间:2012-09-27 15:02:34

标签: c# xml-validation

我是c#的新手,我需要编写一个App来验证一个Xml文件。 应用程序运行没有错误。但是Xml不是有效的 这是代码:

public class Program
{
    /// <summary>
    /// Bool für Valid false or true.
    /// </summary>
    private static bool isValid;

    /// <summary>
    /// Validiert eine Xml Datei gegen ein XmlSchema
    /// </summary>
    /// <param name="args">Args StringArray</param>
    private static void Main(string[] args)
    {
        // Strings der Dateien:
        const string xmlfile = @"C:\\temp\dataneu.xml";
        const string xsdfile = @"C:\\temp\xsd\OlShopSchnittstelle.xsd";

        // Reader settings öffnen, Schema hinzufügen + ValidationType setzen.
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.Schemas.Add("http://tempuri.org/OLShopSchnittstelle.xsd", xsdfile);
        settings.ValidationType = ValidationType.Schema;

        // XmlDoc, settings zum neuen XmlReader hinzufügen.
        XmlReader reader = XmlReader.Create(xmlfile, settings);

        // Neues XmlDoc. mit Reader füllen.
        XmlDocument doc = new XmlDocument();            
        doc.Load(reader);

        // Neuer ValidationEventHandler mit settings
        settings.ValidationEventHandler += new ValidationEventHandler(Settings_ValidationEventHandler);

        // Is Valid auf true, wird bei Fehler auf false gesetzt(EventHandler).
        isValid = true;

        // Validierung
        doc.Validate(Settings_ValidationEventHandler);

        // Wenn EventHandler nicht ausgelöst wird bleibt isValid: true.                
        if (isValid == true)
        {
            Console.WriteLine("Valid Document");
        }
        else
        {
            Console.WriteLine("Invalid Document");
        }

        Console.ReadLine();
    }

    /// <summary>
    /// Wird bei Fehler der Validierung ausgelöst, setzt isValid auf false.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private static void Settings_ValidationEventHandler(object sender, ValidationEventArgs e)
    {

        isValid = false;
        Console.WriteLine("Validation Error: {0}", e.Message);
    }
}

我在这里做错了我的活动没有打电话?

1 个答案:

答案 0 :(得分:2)

您可以取消此代码并设置before XmlReader.Create,并致电reader.Read

您还添加了XmlSchemaValidationFlags

    var settings = new XmlReaderSettings();
    settings.Schemas.Add("http://tempuri.org/OLShopSchnittstelle.xsd", xsdfile);
    settings.ValidationType = ValidationType.Schema;
    settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
    settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;

    settings.ValidationEventHandler += new ValidationEventHandler(Settings_ValidationEventHandler);

    XmlReader reader = XmlReader.Create(xmlfile, settings);

    reader.Read();