0

我是 c# 新手,我需要编写一个应用程序来验证 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);
    }
}

我在这里做错了什么,我的事件没有调用?

4

1 回答 1

2

You can deplace this code and set before XmlReader.Create, And Call reader.Read

You add also 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();
于 2012-09-27T15:07:58.700 回答