2011-10-28 14 views
0

私はXMLファイルを持っていますが、XSDでは2つの間違いがあります。しかし、ValidationEventHandlerは一度だけトリガされ、最初の間違いを訂正した場合にのみ2番目の間違いを表示します。私は完全にあなたの問題を理解していないValidationEventHandlerは1回だけトリガされますか?

 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);    
     } 
    } 

答えて

1

: これは私のコードです。 XMLが正しいことを確認したい場合は、1エラーまたは2がある場合は何も変わりません。あなたのコードは、XMLが正しくないことを知らせます。

さらに、XmlReaderはエラーが検出された場合でも読み込みを続行しない(おそらくできない)とします。

+0

XmlReaderは、現在のドキュメントを最後まで読み込み続けますが、欠落している要素は無視します。私は文書のすべての間違いを示すレポートを生成する必要があります。 – Wachburn

+0

おそらくあなたはValidateメソッドを試すことができます – rgargente

関連する問題