2011-01-10 17 views
5

c#と.net 3.5を使用すると、含まれているスキーマに対してxmlドキュメントを検証しようとしています。xmldocumentと入れ子になったスキーマ

スキーマと

Schema1.xsd以下の通りですが、そこに含まれては - >

another.xsdをanother.xsd含ま - >私はSCHEMA1を追加しようとすると

をbase.xsd含まれています。 xsdをXmlDocumentに渡すと、次のエラーが発生します。

タイプ 'YesNoType'は宣言されていないか、単純なタイプではありません。

Schema1.xsdスキーマを読み込むときにbase.xsdファイルが含まれていないため、このエラーが発生すると思います。

私はXmlSchemaSetクラスを使用しようとしており、XmlResolver URIをスキーマの場所に設定しています。

注:すべてのスキーマが同じディレクトリEの下で暮らす:\ Devの\メイン\ XmlSchemas

ここでは、コード

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

は、誰でも反対のXmlDocument確認に関する正しい方向に私を指すことができますですネストしたインクルードのスキーマ。私は何をする必要がスキーマをマージすることであることをを考える

+0

ところで、C#.NETのようなものはありません –

答えて

0

:彼らはあなたが階層の最下部に開始する必要がありますことを意味し、入れ子になっている場合は

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

その順にロードしてください。私が見つけたサンプルには、厳密に言えば、ネストされた構造ではなく、むしろ補完的な構造があるため、私は100%確信していません。がんばろう。

1

また、ネストされたスキーマのケースがあり、私はvalidating.Myコードでfollwoingのように見えるエラーは見つかりません。

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; 
    } 
関連する問題