xml 根据 C# 中的模式验证后,字符串未加载到数据集

xml string is not loading to dataset after validating against schema in c#

我从我的 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 中。我对此很困惑,请帮我解决这个问题。

你的StringReader传给showScheduler()的位置已经到了末尾,因为之前已经用它来读取整个字符串了。您可以传递实际的字符串,并为填充 DataSet 的任务创建一个单独的 StringReader :

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