Программирование >>  Автоматически обновляемые приложения 

1 ... 112 113 114 [ 115 ] 116 117 118 ... 170


Как прочитать 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 приведен код, в котором выводятся имена элементов и типы документа. Имейте в виду, что в данном примере пропущены атрибуты элементов.



1 ... 112 113 114 [ 115 ] 116 117 118 ... 170

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика