2017-03-10 17 views
0

以下のコードを使用してXSDファイルでXMLスキーマを検証しています。そのうまく動作します。今私はXSDファイルでXMLスキーマ、データ、およびそのシーケンスを検証したいと思います。どのように私はこれを行うことができます。事前におかげで助けてください。C#でxsdファイルを使用してxmlファイルのスキーマ、データ、シーケンスを検証する方法は?

FileStream fs = new FileStream(@"D:\Intra\INTTRA.xsd", FileMode.Open); 
XmlSchema schema = XmlSchema.Read(fs, ValidationCallBack); 
schema.TargetNamespace = "http://xml.inttra.com/booking/services/01"; 
XmlReaderSettings settings = new XmlReaderSettings(); 
settings.Schemas.Add(schema); 
settings.ValidationType = ValidationType.Schema; 
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation; 
settings.ValidationEventHandler += new  
ValidationEventHandler(ValidationCallBack); 
XDocument doc = XDocument.Load(@"D:\Intra\BookingRequest_07032017_153200.xml"); 
MemoryStream stream = new MemoryStream(); 
StreamWriter writer = new StreamWriter(stream); 
writer.Write(doc.ToString()); 
writer.Flush(); 
stream.Position = 0; 
XmlReader xr = XmlReader.Create(stream, settings); 

while (xr.Read()) 
{ 
    string s = xr.Name; 
    Console.WriteLine(s + "<br/>"); 
} 

fs.Close(); 

答えて

0

我々は、それは私がxmlファイルのパスを入れなければならない。この

private void ValidateRequest(string xmlPayload) 
{ 
    XmlTextReader xsdReader = null; 
    XmlSchemaSet xsdSchema = null; 
    XmlReaderSettings xmlReader = null; 

    xsdReader = new XmlTextReader("your xsd file path here"); 
    xsdSchema = new XmlSchemaSet(); 
    xsdSchema.Add(null, xsdReader); 
    xsdSchema.Compile(); 

    xmlReader = new XmlReaderSettings(); 

    xmlReader.ValidationType = ValidationType.Schema; 
    xmlReader.Schemas.Add(xsdSchema); 
    xmlReader.ValidationEventHandler += vr_ValidationEventHandler; 

    XmlReader reader = XmlReader.Create(new StringReader(xmlPayload), xmlReader); 
    while (reader.Read()) ; 
    reader.Close(); 
} 

void vr_ValidationEventHandler(object sender, ValidationEventArgs e) 
{ 
    switch (e.Severity) 
    { 
     case XmlSeverityType.Error: 
      throw new Exception(e.Message); 
     case XmlSeverityType.Warning: 
      break; 
    } 
} 
+0

好きですか? – user3828909

+0

XMLを文字列としてValidateRequestメソッドに渡してから、xsdへの 'XmlTextReader'パスに渡します –

関連する問題