Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5fan_ru_ПАРАДИГМИ ПРОГРАМУВАННЯ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.32 Mб
Скачать

9.2.3. Контроль типів даних при читанні Xml-документа

Клас XmlReader також дозволяє читати дані із строгим контролем типів. Для цього використовуються методи ReadElementContentAs... ReadElementContentAsDouble(), ReadElementContentAsBoolean() та інші. Далі показано як можна прочитати значення в десятковому форматі і виконати обчислення. У прикладі вибирається значення ціни книги, яке збільшується на 25%.

Створимо ще одну кнопку з написом New Price, а в її обробнику напишемо код:

private void btnNewPrice_Click(object sender, EventArgs e)

{

//Обробник кнопки NewPrice - контроль типів

richTextBox1.Clear();

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

while (rdr.Read())

{

if (rdr.NodeType == XmlNodeType.Element)

{

if (rdr.Name == "PRICE")

{

decimal price = rdr.ReadElementContentAsDecimal();

richTextBox1.AppendText("Curent Price = "+ price+ "\r\n");

price += price * (decimal)0.25;

richTextBox1.AppendText("New Price = " + price + "\r\n\r\n");

}

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

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

}

}

rdr.Close();

}

Якщо це значення не може бути перетворене до необхідного типа, збуджується виключення FormatException.

Компілюємо і запускаємо на виконання наш проект.

В результаті отримуємо повідомлення про помилку. Причина – текст елементу має вигляд:

<PRICE>$10.95</PRICE>

Виправимо всі елементи <PRICE> 10.95</PRICE>

а документ збережемо під ім'ям ("book3.xml");

В результаті отримаємо:

9.3. Створення xml-документа в Visual Studio

Для створення XML-файла в середовищі Visual Studio потрібно в меню File вибрати New->File. У вікні створення вибрати Xml-файл.

Відкриється Xml-редактор, в якому можна вводити елементи Xml. Редактор автоматично перевіряє помилки і підставляє закриваючі теги. Створений файл можна зберегти в потрібному місці на диску командою SaveXmlFile.xml As...

Лекція 10. Створення xml-документів в .Net

План

1. Використання класу XmlWriter - запис потоків даних Xml

2. Використання DOM в .Net

2.1. Читання XML-документа за допомогою XmlNodeList

2.2. Вставка елементів (вузлів) в XML- документ

3. Обробка атрибутів

3.1. Витягання атрибутів за допомогою XmlReader

3.2. Вставка атрибутів в документ за допомогою XmlWriter

10.1. Використання класу XmlWriter - запис потоків даних Xml

Таблиця 10.1. Основні класи читання і запису даних XML

XmlReader

Абстрактний клас, що виконує читання і забезпечує швидку доставку некерованих даних XML. Клас є однонаправленим синтаксичним аналізатором

XmlWriter

Абстрактний клас, що виконує запис даних у вигляді потоку або файлу

XmlTextReader

Реалізація класу XmlReader. Забезпечує однонаправлений потоковий доступ до даних XML

XmlTextWtiter

Реалізація класу Xml.Writer. Забезпечує швидку однонаправлену генерацію потоків XML

Для роботи з даними кожен з класів надає необхідні методи.

Клас XmlWriter дозволяє записувати Xml-код в потік даних, файл, в клас StringBuilder, TextWriter та інші об'єкти XmlWriter.

Клас легко конфігурується, що дозволяє визначити потребу в допоміжних установках, таких як відступи, лапки, простори імен і інше. Така конфігурація виконується з використанням об'єкту XmlWriterSettings.

Створимо обробник кнопки WriteXml прикладу попередньої лекції.

При натисненні кнопки WriteXml виконується створення елементів XML-документа і запис його в новий файл "booknew.xml";

private void btmWriteXml_Click(object sender, EventArgs e)

{

// запис у файл

XmlWriterSettings setting = new XmlWriterSettings();

setting.Indent = true;

XmlWriter writer = XmlWriter.Create("booknew.xml", setting);

writer.WriteStartDocument();

//початок створення єлементов

writer.WriteStartElement("Catalog");

writer.WriteStartElement("book");

writer.WriteElementString("title", "Основи інженерії якості програмних систем");

writer.WriteStartElement("author");

writer.WriteElementString("name", "Коротун Т.М.");

writer.WriteElementString("name", "Коваль Г.І.");

writer.WriteEndElement();

writer.WriteElementString("price", "120.00");

writer.WriteEndElement();

writer.WriteEndElement();

writer.WriteEndDocument();

//Очищення потоку

writer.Flush();

writer.Close();

}

В цьому прикладі створюється новий XML-файл booknew.xml, у який записуються дані про нову книгу. Клас XmlWriter перезаписує існуючий вміст файлу новим вмістом. Для вставки нових елементів використовуються методи класу XmlWriter. Для створення об'єкту XmlWriter використовується статичний метод Create(). У прикладі рядок, що представляє ім'я файлу, передається як параметр разом з екземпляром класу XmlWriterSettings.

Клас XmlWriterSettings має властивості, які керують способом створення Xml-докуметів. Наприклад, властивість Indent – булеве значення, яке визначає, чи повинні елементи виводитися з відступом. Властивість IndentChars містить рядок символів, використовуваний для відступу. За умовчанням це рядок з двох символів. Властивість NewLine служить для визначення символу нового рядка.

Основні методи класу XmlWriter

WriteStartDocument()

додає оголошення документа. Після цього можна додавати дані.

WriteEndDocument()

визначає кінець документа (вставляє тег кінця)

WriteStartElement()

додає новий елемент

WriteElementString

вставляє рядок, вказуючий ім'я і вміст елементу

WriteEndElement

визначає кінець елементу (вставляє тег кінця)

Окрім цих, існують інші методи, що дозволяють виводити спеціальні розділи і атрибути документа.

В результаті буде створений такий файл:

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

<Catalog>

<book>

<title>Основи інженерії якості програмних систем</title>

<author>

<name>Коротун Т.М.</name>

<name>Коваль Г.І.</name>

</author>

<price>120.00</price>

</book>

</Catalog>

Цей файл містить XML-документ, що описує одну книгу. Такий метод придатний для створення нових документів. А що робити, якщо необхідно додати елемент в існуючий XML-документ? Наприклад додати нову книгу в каталог. Для цього потрібно скористатися класами DOM.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]