2011-06-29 58 views
1

所有可用於網絡的C#代碼僅用於讀取和加載XMLXSD如何在C#windows窗體中驗證xml針對XSD

XmlDocument xmlDocument = new XmlDocument(); 
xmlDocument.Load(@"D:\XML\Sample.xml"); 
xmlDocument.Schemas.Add("http://www.w3.org/2001/XMLSchema", @"D:\XML\Sample.xsd"); 
xmlDocument.Schemas.Compile(); 

ValidationEventHandler eventhandler = new ValidationEventHandler(ValidationEventHandler); 
xmlDocument.Validate(eventhandler); 

if (valid == true) 
{ 
    label1.Text = "Xml Got Validated!!"; 
} 

void ValidationEventHandler(object sender, ValidationEventArgs e) 
{ 
    valid = false; 
    switch (e.Severity) 
    { 
     case XmlSeverityType.Error: label1.Text = "Xml Validation Failed".ToString(); 
      break; 
     case XmlSeverityType.Warning: label1.Text = "Xml Has some warning".ToString(); 
      break; 
    } 
} 

這實際上是沒有驗證我的XML只是閱讀,即使我不及格是強制性的元素,它說:「ITS有效」

+0

這米試圖從1個月至做,請幫助:( – Shilpa

回答

0

我用下面併成功應用驗證:

var xsd = new XmlSchemaSet(); 

using (var ms = new StringReader(Resources.MyXsd)) 
{ 
    using (var reader = XmlReader.Create(ms)) 
    { 
     xsd.Add(XmlSchema.Read(reader, delegate { })); 
    } 
} 

var document = XDocument.Parse(text); 

document.Validate(
    xsd, (o, e) => 
     { 
      if (e.Severity == XmlSeverityType.Error) 
      { 
       validationMessages.Add(e.Exception.Message); 
      } 
     } 
); 
+0

u能請告訴我笏我的XML和XSD第一線標籤shud是??是有一些強制THT在XSD shud匹配無線我的目標namspace在xml中的命名空間?我做了這個也仍然沒有驗證。可以ny1給我準確的語法的第一線標籤爲xml和xsd如何它不寒而慄' – Shilpa

+0

使用這個,我似乎跳過驗證。即使對xsd運行完全不同的xml,我也沒有任何錯誤。任何想法爲什麼這可能是? – Andy

+0

名稱空間是否相同? – Jeff