Другие языки и технологии

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-файла, но и его структуру, перемещаясь по которой вытягиваем значения внутренних элементов древовидной структуры. Естественно, в конце необходимо уничтожить файлстрим.