#c#
#c#
Вопрос:
Как мне преобразовать схему в datatable на c#
<header>
<xs:schema id="header" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="header" msdata:IsDataSet="true" msdata:MainDataTable="Table" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Table">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:int" minOccurs="0" />
<xs:element name="enteredon" type="xs:dateTime" minOccurs="0" />
<xs:element name="enteredby" type="xs:string" minOccurs="0" />
<xs:element name="remark" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
</header>
Пытаюсь выполнить этот код, но безуспешно:
public static Stream StringToStream(string data)
{
try
{
System.IO.MemoryStream xmlStream = new System.IO.MemoryStream();
StreamWriter writer = new StreamWriter(xmlStream);
writer.Write(data);
writer.Flush();
return xmlStream;
}
catch (Exception)
{
return null;
}
}
table.ReadXmlSchema(StringToStream(saveData));
Комментарии:
1. Когда вы говорите «сбой», что именно вы имеете в виду? Выдает ли это исключение? Считывает ли он часть схемы? Происходит ли сбой без предупреждения и т.д.
Ответ №1:
Ваш код выдаст исключение «Корневой элемент отсутствует».
Я нашел решение в DaniWeb, которое заключается в добавлении приведенных ниже кодов для сброса позиции.
System.IO.MemoryStream xmlStream = new System.IO.MemoryStream();
StreamWriter writer = new StreamWriter(xmlStream);
writer.Write(data);
writer.Flush();
xmlStream.Position = 0;//Add this to reset the position of the stream.
Попробуйте еще раз.
Комментарии:
1. ты потрясающий, это именно та ошибка, которую я получал, и установка позиции в 0 сделала свое дело. Спасибо.