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];
}
}
我从我的 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];
}
}