2016-03-26 7 views
0

SOAPサービスからxmlを受け取って文字列に変換し、スキーマに対して検証します。検証は円滑に行われますが、データセットに配置してdatagridviewに配置しようとすると、ルート要素が見つからないと表示されます。以下は私のコード、xml文字列がCのスキーマに対して検証された後にデータセットにロードされない

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 
     { 
      XmlReaderSettings xmlReaderSttngs = new XmlReaderSettings(); 
      XmlDocument xmlDoc = new XmlDocument(); 
      DateTime date = dateTimePicker1.Value; 
      SoapWebReference.SOAPWebService SoapService= new SoapWebReference.SOAPWebService(); 
      string xmlString = SoapService.getSchedule(instructorId, date).OuterXml.ToString(); 

      xmlReaderSttngs.ValidationType = ValidationType.Schema; 
      xmlReaderSttngs.Schemas.Add("","SoapSchema.xsd"); 
      StringReader reader = new StringReader(xmlString); 
      XmlReader xReader; 
      try 
      { 
       xReader = XmlReader.Create(reader, xmlReaderSttngs); 
       xmlDoc.Load(xReader); 
       showSchedule(reader);   
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      }   
     } 

     private void showSchedule(StringReader reader) 
     { 
      DataSet dt = new DataSet(); 
      dt.ReadXml(reader); 
      dataGridView1.DataSource = dt.Tables[0]; 
     } 

は驚くべき事は、私が検証なしでデータセットに文字列を読み込むとき、それがデータセットにロードし、GridViewの上に表示されていることです。私はこれと混同しています、これを解決するために私を助けてください。

答えて

1

showScheduler()に渡されたときのあなたのStringReaderの位置は、それ以前に文字列全体を読み取るために使用されているため、すでに最後です。代わりに実際の文字列を渡して、DataSetを入力する作業のために別のStringReaderを作成することができます。