在c#中验证模式后,xml字符串未加载到数据集

时间:2016-03-26 00:58:58

标签: c# xml validation xsd dataset

我从SOAP服务中收到一个xml,然后将其转换为字符串并根据模式进行验证。验证顺利进行,但当我尝试将其放入数据集以将其放入我的datagridview时,它表示缺少根元素。以下是我的代码,

 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 个答案:

答案 0 :(得分:1)

传递给StringReader的{​​{1}}位置已经结束,因为之前已经用它来读取整个字符串。您可以改为传递实际字符串,并为填充showScheduler()的任务创建单独的StringReader

DataSet