2011-01-10 16 views
5

Używanie C# i .net 3.5 Próbuję sprawdzić poprawność dokumentu xml względem schematu, który zawiera.xmldocument i zagnieżdżone schematy

schematów i nie obejmuje są jak poniżej

Schema1.xsd -> obejmują another.xsd

another.xsd -> to base.xsd

Gdy próbuję dodać Schema1. xsd do XmlDocument otrzymuję następujący błąd.

Typ "YesNoType" nie jest zadeklarowany lub nie jest prostym typem.

Wierzę, że otrzymuję ten błąd, ponieważ plik base.xsd nie jest dołączany podczas ładowania schematu Schema1.xsd.

Próbuję użyć klasy XmlSchemaSet i ustawiam URI XmlResolver na lokalizację schematów.

UWAGA: Wszystkie schematy żyć w tym samym katalogu E: \ Dev \ Main \ XmlSchemas

Oto kod

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

Czy ktoś może wskazać mi w dobrym kierunku, dotyczące potwierdzania XmlDocument Przeciw schemat z zagnieżdżonymi załącznikami.

+0

Przy okazji, nie ma czegoś takiego jak C# .NET –

Odpowiedz

0

myślę że to, co trzeba zrobić, to połączyć schematów:

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

Jeśli są one zagnieżdżone, co oznacza, że ​​trzeba rozpocząć na dole hierarchii i załaduj je w tej kolejności. Nie jestem w 100% pewny, ponieważ próbki, które udało mi się znaleźć, nie mają, ściśle mówiąc, struktur zagnieżdżonych, ale raczej struktury komplementarne. Powodzenia.

1

Mam również zagnieżdżone wzorzec schematu i nie znajduję żadnego błędu w sprawdzaniu poprawności. Mój kod wygląda jak napotkany.

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