2012-03-23 66 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

看看這個[SO帖子和回覆] [1]。它詳細解釋瞭如何進行驗證。 [1]:http://stackoverflow.com/questions/9806346/single-pass-read-and-validate-xml-vs-referenced-xsd-in-c-sharp – 2012-03-23 15:54:13

回答

0

用於驗證事件處理程序的代碼丟失。

望着這是略有不同的我工作的代碼我有這個

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

不記得爲什麼我不得不雖然添加。

首先要做的是確保事件處理程序正在觸發,之後它可能是您的xsd的問題。