ValidationEventHandlerは1回だけトリガされますか?

私はXSDで2つの間違いがあるXMLファイルを持っています。しかし、ValidationEventHandlerは一度だけトリガされ、最初の間違いを訂正した場合にのみ2番目の間違いを表示します。 これは私のコードです:

       public static void ValidateXml(string xml, string xsd)
    {
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ValidationEventHandler += settings_ValidationEventHandler;
        settings.ValidationType = ValidationType.Schema;
        settings.Schemas.Add(null, XmlReader.Create(xsd));
        if (settings.Schemas.Count > 0)
        {
            using (XmlReader reader = XmlReader.Create(xml, settings))
            {
                while (reader.Read())
                {
                }                    
            }
        }
    }

    private static void settings_ValidationEventHandler(object sender,
                                    ValidationEventArgs e)
    {
        Console.WriteLine("Validation Error Message: {0}", e.Message);
        Console.WriteLine("Validation Error Severity: {0}", e.Severity);
        if (e.Exception != null)
        {
            Console.WriteLine("Validation Error Line Number: {0}",
                    e.Exception.LineNumber);
            Console.WriteLine("Validation Error Line Position: {0}",
                    e.Exception.LinePosition);               
        }
    }
0

1 答え

私はあなたの問題を完全に理解していません。 XMLが正しいことを確認したい場合は、1エラーまたは2がある場合は何も変わりません。あなたのコードは、XMLが正しくないことを知らせています。

さらに、私は、XmlReaderがエラーを見つけた場合、読み込みを続行しない(おそらくできない)と考えています。

1
追加された
XmlReaderは現在のドキュメントを最後まで読み込み続けますが、欠落している要素は無視します。私は文書のすべての間違いを示すレポートを生成する必要があります。
追加された 著者 Wachburn,
たぶんあなたはValidateメソッドを試すことができます
追加された 著者 rgargente,