2012-03-23 3 views
0

xmlファイルのバリデータを作成しようとしています。私はこのサイト(例えばHow to validate an XML document?のような)にある他のいくつかの例を使用しました。C#でxsdを使用してxmlファイルを検証します。実際にどのくらい検証されますか?

私は期待通りに動作していないと思う。実際に検証されるのは何ですか?

xmlファイルで何が変更されたとしても、バリデータのdosentはエラーとみなします。 xmlファイルにxsdで定義されていない要素が含まれているかどうかを確認すると思いました。バリデーターは、通常のXML構文エラーのみを捕捉します。

影響がない場合、xsdを使用するポイントは何ですか?

私のバリデータ

string xsd_file = "Message.xsd"; 
XmlSchema xsd = new XmlSchema(); 
xsd.SourceUri = xsd_file; 

XmlSchemaSet ss = new XmlSchemaSet(); 
ss.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler); 
ss.Add(null, xsd_file); 
if (ss.Count > 0) 
{ 
    XmlReaderSettings settings = new XmlReaderSettings(); 
    settings.ValidationType = ValidationType.Schema; 
    settings.Schemas.Add(ss); 
    settings.Schemas.Compile(); 
    settings.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler); 
    XmlTextReader r = new XmlTextReader(filepath); 
    using (XmlReader reader = XmlReader.Create(r, settings)) 
    { 
     try 
     { 
      while (reader.Read()) 
      { 
      } 
     } 
     catch (XmlException ex) 
     { 

      throw; 
     }       
    } 
} 
+1

この[投稿と回答] [1]を見てください。それは、検証を行う方法を詳細に説明します。 [1]:http://stackoverflow.com/questions/9806346/single-pass-read-and-validate-xml-vs-referenced-xsd-in-c-sharp –

答えて

0

検証EventHandlerのためのコードがありません。

若干異なっている私の作業コードを見てみると、私は私もそれを追加しなければならなかった理由は、この

settings.ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema | XmlSchemaValidationFlags.ReportValidationFlags; 

は覚えていないことができています。

まず、イベントハンドラがトリガされていることを確認してから、xsdに問題がある可能性があります。

関連する問題