2011-01-10 16 views
5

Mit C# und .net 3.5 Ich versuche, ein XML-Dokument gegen ein Schema zu validieren, das enthält.xmldocument und verschachtelte Schemas

Die Schemata und es umfasst sind, wie unten

Schema1.xsd -> schließen base.xsd

Wenn ich versuche, die Schema1 hinzufügen ->

another.xsd another.xsd umfassen. xsd zum XmlDocument erhalte ich den folgenden Fehler.

Typ 'YesNoType' ist nicht deklariert oder ist kein einfacher Typ.

Ich glaube, ich bekomme diesen Fehler, weil die Datei base.xsd nicht enthalten ist, wenn ich das Schema Schema1.xsd lade.

Ich versuche, die XmlSchemaSet-Klasse zu verwenden, und ich setze das XmlResolver-uri auf den Speicherort der Schemas.

HINWEIS: Alle Schemas leben unter dem gleichen Verzeichnis E: \ Dev \ Main \ XmlSchemas

Hier ist der Code

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

Kann ein XmlDocument gegen ein jemand mich in die richtige Richtung in Bezug auf die Validierung Schema mit verschachtelten Includes.

+0

Übrigens gibt es so etwas wie C# .NET nicht –

Antwort

0

ich denke, dass, was Sie tun müssen, um das Schema zu fusionieren:

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

Wenn sie verschachtelt sind, das bedeutet, dass Sie am unteren Ende der Hierarchie beginnen müssen werden und lade sie in dieser Reihenfolge. Ich bin nicht 100% sicher, weil die Samples, die ich finden konnte, streng genommen keine verschachtelten Strukturen, sondern komplementäre Strukturen haben. Viel Glück.

1

Ich habe auch eine verschachtelte Schema-Fall und ich finde keinen Fehler bei der Validierung. Mein Code sieht aus wie folgt.

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