|
Программирование >> Автоматически обновляемые приложения
Как прочитать XML-файлы? Кроме обычных текстовых файлов, у программиста возникает потребность открыть для чтения XML-файлы. Это становится все более актуальной задачей в связи с растущей популярностью формата XML. На сайте Microsoft имеется статья из базы знаний Чтение инструкций XML из файла с помощью Visual С# 2005 или Visual С# .NET , которая находится по адресу http: support.microsoft.com/kb/307548/ru. Это один из редких случаев, когда статья дана на русском языке. Причем статья неоднократно редактировалась (текущая версия статьи 3.4). Вкратце расскажу самое основное из этой статьи. В статье описывается использование класса xmiTextReader, который предоставляет возможность выполнять прямой синтаксический разбор и выделение инструкций языка XML (extensible Markup Language). В статье приводится быстрый потоковый доступ к XML с использованием маркеров, являющийся альтернативой использованию объектной модели, такой как XML DOM (Document Object Model). Для примера я создал XML-файл bhvbooks.xml (листинг 10.38), в котором содержится информация о некоторых книгах издательства БХВ-Петербург . f w ........................... WWv,V ........; ........................................:.............. 71истинг 10.38. Содержание файла bhvbooks.xml <?xml version=1.О encoding= windows-1251 ?> <!-- Books from BHV -> <bookstore> <book genre= internet publicationdate= 2007 ISBN= 0000 > <title>Элeктpoннaя почта. Народные советы.</title> <author> <first-name>n.</first-name> <last-name>Дaнилoв</last-name> </author> <price>269.00</price> </book> <book genre= video publicationdate= 2007 ISBN= 0001 > ing лежат готовые файлы koi8-r.txt и win.txt, записанные в соответствующих кодировках, которые вы можете использовать для проверки работы кода. Примечание Пример находится в папке Encoding на прилагаемом компакт-диске. I Листинг 10:39. Использование цикла while для чтения XML-файла while (reader.Read()) { Обработка данных. listBoxl.Items.Add( < + reader.Name + > ); Console.ReadLine(); <title>Цифpoвoe видео. Народные советы (+Видеокурс на CD)</title> <author> <first-name>B.П.</first-name> <last-name>Mono4KOB</last-name> </author> <price>254.00</price> </book> <book genre= security publicationdate= 2007 ISBN= 0003 > <title>Be3onacHOCTb домашнего ПК. Народные советы.</title> <author> <пате>Крупник A.</name> </author> <price>194.00</price> </book> </bookstore> Файл bhvbooks.xml необходимо скопировать в папку \Bin\Debug, которая расположена в папке, где создается данный проект. Создайте новый проект и подключите пространство имен System.xml при помощи директивы using, чтобы избавиться от необходимости указывать объявления XmlTextReader в коде. using System.Xml; Класс XmlTextReader обеспечивает быстрый механизм чтения XML. Нам нужно создать экземпляр объекта XmlTextReader И загрузить файл bhvbooks.xml. Добавьте приведенный ниже код в конструктор формы. XmlTextReader reader = new XmlTextReader ( bhvbooks.xml ); Теперь мы можем прочитать данные XML-файл при помощи метода Read. Метод Read последовательно перемещается по XML-файлу до достижения конца файла, после чего возвращает значение false. (Отметим, что в листинге 10.39 показан внешний цикл while, а в следующих двух действиях показано использование этого цикла для чтения XML). Листинг 10.40. Чтение имен элементов и типов документа while (reader.Read() ) switch (reader.NodeType) { case XmlNodeType.Element: Узел является элементом. listBoxl.Items.Add( < + reader.Name + > ); breaks-case XmlNodeType.Text: Вьшести текст в каждом элементе. listBoxl.Items.Add(reader.Value); breaks-case XmlNodeType.EndElement: Вывести конец элемента. listBoxl.Items.Add( </ + reader.Name + > ); break; Типы узлов элементов могут включать списки связанных с ними узлов атрибутов. Метод MovetoNextAttribute последовательно перемещается по всем атрибутам элемента. Свойство HasAttributes используется для проверки наличия у узла атрибутов. Свойство AttributeCount возвращает количество атрибутов для текущего узла. Использование метода MovetoNextAttribute показано в листинге 10.41, в котором представлен полный код, разбирающий XML-файл. : Листинг 10.41. Полный листинг кода using Systems-using System.Collections.Generic-using System. ComponentModel; using System.Data; using System. Drawings-using System.Text; Для обработки данных XML в каждой записи содержится узел, тип которого можно определить по свойству NodeType. Свойства Name И Value ВОЗВращаЮТ имя узла (имена элемента и атрибута) и значение узла (текст узла) текущего узла (или записи). Перечисление NodeType определяет тип узла. В листинге 10.40 приведен код, в котором выводятся имена элементов и типы документа. Имейте в виду, что в данном примере пропущены атрибуты элементов.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |