2011-01-10 22 views
5

C# ve .net 3.5 kullanma Ben içeren bir şemaya karşı bir xml belgesini doğrulamaya çalışıyorum. > xmldocument ve iç içe geçmiş şemalar

another.xsd içerir another.xsd - -

şemaları ve orada içermektedir

Şema1.xsd aşağıdaki gibidir> içerir i Schema1 eklemeye çalıştığınızda

base.xsd. XmlDocument için xsd aşağıdaki hatayı alıyorum.

'YesNoType' yazılmamış veya basit bir tür değil.

Schema1.xsd şemasını yüklediğimde base.xsd dosyası eklenmediğinden bu hatayı alıyorum.

XmlSchemaSet sınıfını kullanmaya çalışıyorum ve XmlResolver uri'yi şemaların konumuna ayarlıyorum.

NOT: Tüm şemalar aynı dizin E altında yaşamak: \ Dev \ Ana \ XmlSchemas

İşte kod olan

string schemaPath = "E:\\Dev\\Main\\XmlSchemas"; 

XmlDocument xmlDocSchema = new XmlDocument(); 

XmlSchemaSet s = new XmlSchemaSet(); 

XmlUrlResolver resolver = new XmlUrlResolver(); 

Uri baseUri = new Uri(schemaPath); 

resolver.ResolveUri(null, schemaPath); 

s.XmlResolver = resolver; 

s.Add(null, XmlReader.Create(new System.IO.StreamReader(schemaPath + "\\Schema1.xsd"), new XmlReaderSettings { ValidationType = ValidationType.Schema, XmlResolver = resolver }, new Uri(schemaPath).ToString())); 


xmlDocSchema.Schemas.Add(s); 

ValidationEventHandler valEventHandler = new ValidationEventHandler 
(ValidateNinoDobEvent); 

try 
{ 
xmlDocSchema.LoadXml(xml); 
xmlDocSchema.Validate(valEventHandler); 
} 
catch (XmlSchemaValidationException xmlValidationError) 
{ 
// need to interogate the Validation Exception, for possible further 
// processing. 
string message = xmlValidationError.Message; 
return false; 
} 

herkes karşı bir XmlDocument doğrulamaya ilişkin doğru yönde işaret edebilir iç içe içeren şema içerir. Ne yapmanız gereken şemaları birleştirmek olduğunu düşünüyorum

+0

BTW, C# .NET diye bir şey yoktur –

cevap

0

: onlar hiyerarşinin en altında başlamak gerekir anlamına gelir, iç içe ediyorsanız

http://asp.dotnetheaven.com/howto/doc/Xml/MultipleSchemas.aspx

ve bunları o sırayla yükleyin. % 100 emin değilim çünkü bulabildiğim örnekler kesinlikle konuşamayan, iç içe geçmiş yapılara değil, tamamlayıcı yapılara sahip. İyi şanslar.

1

Ayrıca iç içe geçmiş bir şema durumum var ve doğrulamada herhangi bir hata bulamıyorum. Kodum follwoing gibi görünüyor.

private string strLogger = null; 
    public bool ValidateXml(string path2XMLFile, string path2XSDFile) 
    { 
     bool isValidFile = false; 
     try 
     { 
      XmlReaderSettings settings = new XmlReaderSettings(); 
      settings.ValidationType = ValidationType.Schema; 
      settings.Schemas.Add(null, path2XSDFile); 
      settings.ValidationEventHandler += new ValidationEventHandler(settings_ValidationEventHandler); 
      XmlReader reader = XmlReader.Create(path2XMLFile, settings); 
      while (reader.Read()) ; 
      if (String.IsNullOrEmpty(strLogger)) 
      { 
       isValidFile = true; 
      }     
     } 
     catch (Exception ex) 
     { 
      LoggingHandler.Log(ex); 
     } 
     return isValidFile; 
    } 
    private void settings_ValidationEventHandler(object sender, ValidationEventArgs e) 
    { 
     strLogger += System.Environment.NewLine + "Validation Error Message = [" + e.Message + "], " + "Validation Error Severity = [" + e.Severity + "], " + System.Environment.NewLine; 
    } 
İlgili konular