using System.Xml;
Добавьте в класс формы новый метод InsertFromXml, в тело которого вставьте код, приведенный ниже. Метод InsertFromXml демонстрирует технику выделения текстового содержимого узлов XML-документа. Далее мы более подробно рассмотрим способы идентификации узлов при чтении произвольных XML-документов.
void InsertFromXml()
{
XmlTextReader rd = null;
try
{
rd = new XmlTextReader(FindAFile(@"\Students.xml"));
string name = "", phone = "", addr = "";
for (int i = 0; rd.Read(); )
{
if (rd.NodeType == XmlNodeType.Text)
{
switch (i % 3)
{
case 0: name = rd.Value; break;
case 1: phone = rd.Value; break;
case 2: addr = rd.Value;
InsertStudent(name, phone, addr); break;
}
i++;
}
}
}
catch (XmlException ex) { MessageBox.Show(ex.Message); }
finally { rd.Close(); }
}
Сформировать команду вставки новой строки в таблицу базы данных мы сможем лишь после того, как прочтем все три поля (<Name>, <Phone> и <Addr>) очередной записи. Поймать это событие помогает счетчик повторений цикла for. Переменная i используется как счетчик событий вида: "прочтен еще один значимый для нас узел (типа Text)". Каждый третий такт этой последовательности событий свидетельствует о том, что данные для очередной строки таблицы накоплены, пора формировать запись и вставлять ее в таблицу студентов. Свойство Value класса XmlTextReader позволяет добыть текст узла типа Text, то есть выделить содержимое текущего узла.
· Измените содержимое блока try в методе MainForm_Load так, чтобы он вызывал методы, иллюстрирующие ExecuteNonQuery InsertFromXml.
cn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +
FindAFile("\\Students.mdb"));
TestExecuteNonQuery();
InsertFromXml();
ConnectAndRead();
Запустите приложение и убедитесь в том, что данные действительно читаются из файла и попадают в таблицу базы данных. Заметьте, что DataGridView отслеживает этот факт, так как мы привязываем его к данным таблицы студентов после чтения и вставки данных.
Формат XML, являясь стандартом обмена информацией, широко используется при вводе данных непосредственно в базу и обмене ими между разными провайдерами. XML разработан с целью обеспечить высокую надежность и помехоустойчивость, простоту сканирования и синтаксического разбора файлов с данными, при сохранении их читабельности.
Следующий код демонстрирует технику разбора содержимого произвольного XML-документа. Усвоив методы работы с классами пространства имен System.XML, вы сможете разрабатывать свои собстенные алгоритмы чтения и разбора XML-документов для того, чтобы оперативно реагировать на ошибки ввода и нарушения схемы таблиц.
Отдельные узлы XML-документа выделяются с помощью метода Read и идентифицируются с помощью свойства NodeType, имеющего тип перечисления XmlNodeType. Благодаря продуманной, теговой структуре формата XML, в процессе чтения документа можно довольно просто выполнить корректирующие действия, например, поместить прочитанный фрагмент документа в базу данных, найти и указать нарушения формата, отобразить в табличном виде, осуществлять поиск и выбор определенных узлов и т. д.
Код, метода ParseXml, рекомендуется выполнять в режиме отладки (пошагового выполнения с помощью клавиши F10) и при этом внимательно следить за содержимым окна Output. В это окно будет выводиться текст документа с пометками, поясняющими назначение его основных компонентов.
· Добавьте метод ParseXml в класс формы и вызовите его в методе MainForm_Load.
void ParseXml(string fileName)
{
XmlTextReader rd = null;
try
{
rd = new XmlTextReader(FindAFile(@"\Students.xml"));
while (rd.Read())
{
switch (rd.NodeType)
{
case XmlNodeType.Element:
Console.Write("<" + rd.Name);
while (rd.MoveToNextAttribute())
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.