Сегодня рассмотрим вариант наполнения обычного ListBox данными из xml-файла. О том, как выполнять привязку средствами SqlDataReader рассказывается в статье.
К примеру, имеется xml-файл следующей структуры:
<?xml version="1.0"?>
<Head>
<People>Иванов</People>
<People>Петров</People>
<People>Сидоров</People>
<People>Зангиев</People>
<People>Мортар</People>
</Head>
Вот эти самые фамилии, расположенные в тегах <People>...</People> и необходимо выводить в качестве значений элементов контрола ListBox.
Код достаточно простой, поэтому я сначала приведу его пример, а уж потом мы разберем ключевые моменты его.
using System.IO;
using System.Xml;
private void FillMyListBox(ListBox myListBox)
{
//Полная чистка перед добавлением элементов
myListBox.Items.Clear();
//Создаем FileStream, представляющий содержимое xml-файла
FileStream fStream =
new FileStream("MyXMLfile.xml", FileMode.Open,
FileAccess.Read, FileShare.ReadWrite);
//Создаем объект XmlDocument и заполняем его данными
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fStream);
//Пробегаем по всем элементам xml-документа
for(int i = 0; i < xmlDoc.DocumentElement.ChildNodes.Count;)
{
//Наполняем листбокс элементами со сзначениями
//внутреннего текста xml-документа
myListBox.Items.Add(
xmlDoc.DocumentElement.ChildNodes[i].InnerText);
i++;
}
//Обязательно закрываем файлстрим
fStream.Dispose();//или fStream.Close();
}
Первое, что следует выполнять перед наполнением данного контрола, так это предварительная полная чистка, поскольку может случится так, что после использования ListBox, в нем остались устаревшие элементы.
Далее, создаем экземпляр типа FileStream и заносим в него содержимое исходного xml-файла.
Далее, создаем объект класса XmlDocument и также переносим в него все имеющиеся данные. В итоге мы получили не только данные из xml-файла, но и его структуру, перемещаясь по которой вытягиваем значения внутренних элементов древовидной структуры.
Естественно, в конце необходимо уничтожить файлстрим.
Удаление узлов (элементов) из xml документа