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

このコードを置き換えて設定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();
于 2012-09-27T15:07:58.700 に答える