Профи (694), решён 14 года назад
Visual Studio - С# Работа с XML
Далаю все как на оф сайте микрософт: http://msdn.microsoft.com/ru-ru/library/ekw4dh3f(v=VS.90).aspx Все отлично работает. Как только меняю содержание хмл файла на мне нужный, возникает ошибка. http://www.artlebedev.ru/tools/country-list/xml/ Ошибка: Недопустимый знак для указанной кодировки. Строка 5, позиция 9. Как только при чтени натыкаемся на русский символ - ошибка. Пробовал менять кодировку на Windows-1251, то похоже читать вообще не получается: "Список потомков для поля authors создать нельзя. " Может кто поможет решить проблему?Лучший ответ
Пересохранять XML надо в той же кодировке что и изначально. Скорее всего это UTF-8.
Остальные ответы
1.
2. <head>
3. <people>Иванов</people>
4. <people>Петров</people>
5. <people>Сидоров</people>
6. <people>Зангиев</people>
7. <people>Мортар</people>
8. </head>
<head>
<people>Иванов</people>
<people>Петров</people>
<people>Сидоров</people>
<people>Зангиев</people>
<people>Мортар</people>
</head>
Вот эти самые фамилии, расположенные в тегах <people>...</people> и необходимо выводить в качестве значений элементов контрола ListBox. Код достаточно простой, поэтому я сначала приведу его пример, а уж потом мы разберем ключевые моменты его.
view plaincopy to clipboardprint?
1. using System.IO;
2. using System.Xml;
3.
4. private void FillMyListBox(ListBox myListBox)
5. {
6. //Полная чистка перед добавлением элементов
7. myListBox.Items.Clear();
8.
9. //Создаем FileStream, представляющий содержимое xml-файла
10. FileStream fStream =
11. new FileStream("MyXMLfile.xml", FileMode.Open,
12. FileAccess.Read, FileShare.ReadWrite);
13.
14. //Создаем объект XmlDocument и заполняем его данными
15. XmlDocument xmlDoc = new XmlDocument();
16. xmlDoc.Load(fStream);
17.
18. //Пробегаем по всем элементам xml-документа
19. for(int i = 0; i < xmlDoc.DocumentElement.ChildNodes.Count;)
20. {
21. //Наполняем листбокс элементами со сзначениями
22. //внутреннего текста xml-документа
23. myListBox.Items.Add(
24. xmlDoc.DocumentElement.ChildNodes.InnerText);
25. i++;
26. }
27.
28. //Обязательно закрываем файлстрим
29. fStream.Dispose();//или fStream.Close();
30. }
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.InnerText);
i++;
}
//Обязательно закрываем файлстрим
fStream.Dispose();//или fStream.Close();
}
Первое, что следует выполнять перед наполнением данного контрола, так это предварительная полная чистка, поскольку может случится так, что после использования ListBox, в нем остались устаревшие элементы.
Далее, создаем экземпляр типа FileStream и заносим в него содержимое исходного xml-файла.
Далее, создаем объект класса XmlDocument и также переносим в него все имеющиеся данные. В итоге мы получили не только данные из xml-файла, но и его структуру, перемещаясь по которой вытягиваем значения внутренних элементов древовидной структуры.
Естественно, в конце необходимо уничтожить файлстрим.
Все вопросы
Категории
Избранные