1. <?xml version="1.0" encoding="utf-8"?>




 

Формат XML – это способ хранения данных, представленных
в простом текстовом формате, что означает, что эти данные могут быть прочитаны практически любым компьютером. Данное обстоятельство делает этот формат весьма подходящим для использования при передаче данных через Интернет и допускает даже непосредственное прочтение человеком.

XML является языком разметки, с помощью которого можно описать произвольные данные. На основеэтогоязыкаможно организовать хранение информации и ее обмен, не зависящий ни от конкретных приложений, ни от платформы, на которой они исполняются.

XML - документы. Законченный набор данных известен в языке XML под названием XML -документа. XML -документ может представлять собой физический файл на вашем компьютере, а может быть всего лишь строкой в памяти, однако он должен быть законченным
и подчиняться определенным правилам. XML -документ состоит из нескольких различных частей, наиболее важными из которых являются XML- элементы, где содержатся те данные, из которых собственно и состоит документ.

Microsoft.NET Framework использует объектную модель данных XML Document ObjectModel(DOM), чтобы обеспечить доступ
к данным в XML -документах, и дополнительные классы для чтения, записи и навигации в пределах XML -документа. Эти классы поддерживаются пространством имен System.XML. Пример представления описания каталога книг в модели DOM приведен на рис. 8.1.

 

Описание документа на языке XML включает в себя операторы, написанные с соблюдением требований его синтаксиса. При создании XML -документа вместо использования ограниченного набора определенных элементов имеется возможность создавать собственные элементы и присваивать им любые имена по выбору пользователя. Именно поэтому язык XML является расширяемым (extensible). Следовательно, этот язык можно использовать для описания практически любого документа: от музыкальной партитуры до базы данных.

       
 
 
   

 

 


Рис. 8.1. Иерархическая структура документа

 

Например, каталог книг можно описать так, как показано в листинге 8.1 (номера строк не являются частью документа XML). Для создания XML -документа в среде Visual Studio.NET следует воспользоваться командой File\New File и в выпавшем списке шаблонов выбрать имя шаблона XML File.

 

Листинг 8.1. Текст XML -документа

1. <?xml version="1.0" encoding="utf-8"?>

2. <!-- Название файла book.xml-->

3. <KATALOG>

4. <BOOK>

5. <TITLE>С#2005 для профессионалов </TITLE>

6. <AUTHOR>Кристиан Нейгел</AUTHOR>

7. <PAGES>1560</PAGES>

8. <PRICE>800</PRICE>

9. <PDATA>2006 </PDATA>

10. </BOOK>

11. <BOOK>

12. <TITLE>С# в задачах и примерах</TITLE>

13. <AUTHOR>Никита Культин</AUTHOR>

14. <PAGES>240</PAGES>

15. <PRICE>350</PRICE>

16. <PDATA>2007 </PDATA>

17. </BOOK>

18. </KATALOG>

В строке 1 данного листинга записано объявление XML, идентифицирующее текст как документ XML. Несмотря на необязательность объявления XML, документ должен включать его в себя для идентификации используемой версии XML, поскольку документ без объявления XML может в дальнейшем рассматриваться как соответствующий последней версии XML, в результате чего могут появиться ошибки. Информационный параметр version указывает версию XML, использованную в документе, параметр encoding – кодировку документа (utf-8).

В строке2 записан комментарий, начинающийся с символов <!-- и заканчивающийся символами -->. Комментарии можно размещать по всему XML -документу.

В XML -документе данные маркируются с помощью тэгов (элементов), представляющих собой имена, заключенные в угловые скобки (< >). Имена тэгов в XML -документе (такие как KATALOG, BOOK, TITLE, AUTHOR, PAGES, PRICE, PDATA в листинге 8.1) не являются определениями языка XMLи назначаются при создании документа. Для тэгов можно выбирать любые корректно заданные имена, например INVENTORY вместо KATALOG либо ITEM
вместо BOOK. В строке 3 записан корневой тэг – KATALOG, открывающий разметку всего документа. При завершении написания корневого тэга среда автоматически вставляет конечный тэг (строка 18 листинга 8.1), отмечая его символами </.

Примечание. Попытка создания более одного корневого элемента в
XML -документе является ошибкой.

Внутри корневого элемента может находиться произвольное количество вложенных элементов. В листинге 8.1 XML -документ имеет иерархическую структуру в виде дерева с элементами, вложенными
в другие элементы, и с одним элементом верхнего уровня элемент
Документ
, или Корневой элемент (в нашем примере – KATALOG), который содержит все другие элементы. Корневой элемент KATALOG включает в себя элементы-потомки BOOK. В свою очередь элемент BOOK состоит из элементов-потомков TITLE, AUTHOR, PAGES, PRICE, PDATA.

Корректно сформированные XML-документы. Документ называется корректно сформированным (well-formed), если он соответствует следующему минимальному набору правил для XML -доку-ментов:

XML -документ должен иметь только один корневой элемент – элемент Документ. Все другие элементы должны быть вложены
в корневой элемент;

– элементы должны быть вложены упорядоченным образом.
Если элемент начинается внутри другого элемента, то он должен и заканчиваться внутри этого элемента;

– каждый элемент должен иметь начальный и конечный тэги.
В отличие от языка HTML, в языке XML не разрешается опускать
конечный тэг даже в том случае, когда браузер в состоянии определить, где заканчивается элемент;

– название элемента в начальном тэге должно точно соответствовать (с учетом регистра) названию в соответствующем конечном тэге;

– название элемента должно начинаться с буквы или с символа подчеркивания (_), после чего могут идти буквы, цифры, а также символы: точка (.), тире (-) или подчеркивание.

Это базовые правила корректного формирования XML -документа. Для других понятий языка XML (атрибутов, примитивов, связей) действуют свои правила, которые необходимо соблюдать. Можно сказать, что если документ создан правильно и при его отображении и использовании не возникает никаких ошибок, то это
и есть корректно сформированный документ. Если вы ошибетесь
в каком-либо тэге HTML -страницы, то браузер просто проигнорирует соответствующий тэг, а ошибка в тэге XML -страницы сделает невозможным ее отображение. При наличии одной из ошибок встроенный в Internet Explorer анализатор (его иногда называют XML -про-цессором, или парсером) определяет ее позицию

Классы библиотеки FCLдля чтения XML-файлов. Работу
с XML -документами поддерживают следующие классы библиотеки FCL: XmlTextReader, XmlDocument, XPathNavigator.

Класс XmlTextReader – это абстрактный класс, выполняющий чтение и обеспечивающий быструю доставку некэшированных данных.Этот подход в отношении серверных ресурсов является наименее дорогостоящим, но он принуждает извлекать данные последовательно, от начала до конца.

Класс XmlDocument представляет собой реализацию модели DOM. Этот класс удерживает данные в памяти после вызова метода Load() для извлечения их из файла или потока, обеспечивает древовидное представление документа в памяти с возможностями навигации и редактирования, а также позволяет модифицировать данные
и сохранять их обратно в файл.

Класс XPathNavigator так же, как и класс XmlDocument, удерживает в памяти XML - документ целиком. Он предоставляет расширенные средства поиска данных, однако не обеспечивает возможности внесения изменений и их сохранения.

Класс XmlTextReader. Рассмотрим простой пример. Разместим на форме элементы richTextBox и button (рис. 8.2). При щелчке на кнопку в элемент richTextBox будет загружаться файл, содержимое которого было представлено в листинге 8.1. Код функции, вызываемой при щелчке на кнопку, показан в листинге 8.2.

 

Рис. 8.2. Результаты считывания из Xml -документа

Листинг 8.2. Код обработчика щелчка по кнопке

//Очистка элемента richTextBox1

richTextBox1.Clear();

// Вызов статического метода Create(), возвращающего объект класса

// Файл book.xml находится в том же месте, что и исполняемый файл

// программы

XmlReader rdr = XmlReader.Create("book.xml");

// Метод Read() перемещает на следующий узел Xml -документа

While (rdr.Read())

{

if (rdr.NodeType == XmlNodeType.Text)

richTextBox1.AppendText(rdr.Value + "\r\n");

}

Класс XmlReader также может читать данные со строгим контролем типов. Существует несколько методов ReadElementContentAs, выполняющих чтение, среди которых ReadElementContentAsDecimal(), ReadElementContentAsInt(), ReadElementContentAsBoolean() и др.

В листинге 8.3 показано, как считывать значения в десятичном формате и выполнять над ними математические операции. В рассматриваемом случае цена элемента увеличивается на 25 %. Результаты выполнения этого кода показаны на рис. 8.3.

 

 

Рис. 8.3. Результаты считывания из Xml - документа

только названия и цены книг

 

Листинг 8.3. Чтение данных со строгим контролем типов

 

// Очистка элемента richTextBox1

richTextBox1.Clear();

// Создание потока для чтения из файла book.xml

XmlReader rdr = XmlReader.Create("book.xml");

While (rdr.Read())

{

if (rdr.NodeType == XmlNodeType.Element)

{

// Проверка имени элемента

if (rdr.Name == "PRICE")

{

// Метод ReadElementContentAsDecimal() выполняет

// преобразование содержимого элемента к типу decimal

decimal price = rdr.ReadElementContentAsDecimal();

richTextBox1.AppendText("Текущая цена = " + price +

"руб\r\n");

// Изменение цены на 25 %

price += price * (decimal).25;

richTextBox1.AppendText("Новая цена= " + price +

"руб\r\n\r\n");

}

else if (rdr.Name == "TITLE")

richTextBox1.AppendText(rdr.ReadElementContentAsString() + "\r\n");

}

}

Класс XmlDocument. Этот класс и производный от него класс XmlDataDocument используются в библиотеке .NET для представления объектной модели документа DOM.

В отличие от класса XmlReader, класс XmlDocument предла-гает возможности не только чтения, но и записи, а также произвольного доступа к дереву DOM.

Рассмотрим пример, в котором создается объект класса XmlDocument, загружается документ с диска и отображается окно списка с названиями книг (рис. 8.4).

 

 

Рис. 8.4. Отображение названий книг в списке.

 

В классе формы приложения создадим объект класса
XmlDocument:

XmlDocument _doc = new XmlDocument();

 

Код обработчика щелчка по кнопке приведен в листинге 8.4.

 

Листинг 8.4. Загрузка названий книг в список

 

_doc.Load("book.xml");

// Получить только те узлы, которые нужны

XmlNodeList nodeLst = _doc.GetElementsByTagName("TITLE");

// Просмотр в цикле класса XmlNodeList



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-09-06 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: