2012-09-27 107 views
0

我是新來的C#,我需要編寫一個應用程序來驗證一個Xml文件。 應用程序運行時沒有錯誤。但XML是無效 Here's代碼:ValidationEventHandler not calling

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

您可以deplace這個代碼,並設置beforeXmlReader.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(); 
+0

非常感謝,現在it's工作。 –

+0

我很高興爲您效勞保羅謝謝 –