- •Поставщики данных ado.Net
- •Для создания набора данных
- •Создание объектов Connection sql Server
- •Создание объектов Connection odbc
- •Пул подключения
- •Разработка приложений с многодокументным интерфейсом
- •Создание родительской формы
- •Создание дочерних форм
- •Работа с потоками
- •Синхронизация потоков
- •Взаимодействие потоков
- •Создание потоков
- •Элемент управления webBrowser
- •Работа с документами в элементе управления webBrowser
- •Создание браузера
- •Работа с xml документами
- •Чтение содержимого xml
- •Запись xml документа
- •Чтение xml в dom
Чтение содержимого xml
Напишем функцию ReadXml по чтению xml файла. На вход подадим имя нашего файла author.xml, на выходе получим прочитанного автора.
На C# read xml осуществляется с помощью класса XmlTextReader. Он доступен во всех версиях .Net Framework, начиная с 1.0. XmlTextReader реализует методы «только вперед», т.е. обеспечивает строго последовательный обход XML-файла. За счет этого достигается весьма хорошая скорость обработки данных.
static Author ReadXml(string fileName)
{
Author author = new Author();
using (XmlTextReader reader = new XmlTextReader(fileName))
{
while (reader.Read())
{
if (reader.IsStartElement("Автор") && !reader.IsEmptyElement)
{
while (reader.Read())
{
if (reader.IsStartElement("ФИО"))
author.fio = reader.ReadString();
else if (reader.IsStartElement("Дата_рождения"))
author.birthDay = DateTime.Parse(reader.ReadString());
else if (reader.IsStartElement("Пол"))
author.sex = reader.ReadString();
else if (reader.IsStartElement("Книга") && !reader.IsEmptyElement)
{
Book book = new Book();
book.id = Int32.Parse(reader.GetAttribute(0));
while (reader.Read())
{
if (reader.IsStartElement("Название"))
book.name = reader.ReadString();
else if (reader.IsStartElement("Количество_страниц"))
book.pageCount = Int32.Parse(reader.ReadString());
else if (!reader.IsStartElement() && reader.Name == "Книга")
{
author.books.Add(book);
break;
}
}
}
else if (!reader.IsStartElement() && reader.Name == "configuration")
break;
}
}
}
}
return author;
}
Примечание: при чтении тега, который подразумевает вложенность, нужно помимо проверки reader.IsStartElement("Книга") еще проверять, что этот элемент не пустой !reader.IsEmptyElement. Иначе при наличии такой конструкции <книга /> (т.е. открывающийся тег является и закрывающимся) программа войдет во вложенный цикл и уже не выйдет из него до окончания xml файла.
Запись xml документа
Позволяет записывать Xml в файл, консоль, поток или в вывод других типов. Также абстрактный класс. при вызове статического метода xmlwriter.create можно создать экземпляр по умолчанию.
XmlWriter aWriter = XmlWriter.Create (parametr)
Можно создать экземпляр класса при помощи класса xmlwriter.setting
XmlWriterSetting mySetting = new XmlWriterSetting();
mySetting.Indent = true;
aWriter = XmlWriter.Create(parameter, mySetting);
изменение документа xml
используя методы встроенные в класс xml документ можно добавлять, удалять и копировать узлы.
XmlDocument aDocument = new XmlDocument();
XmlElement anElement;
XmlText aText;
//создание нового элемента
anElement = aDocument .CreateElement(“TextNode”);
//создание нового текстового узла
aText = aDocument.CreateTextNode(“Thisih the test text”);
//объявление нового узла
XmlNode node;
Node = aDocument. AppendChild(anElement);
//вставка нового элемента
Node = aDocument.AppendChild (aText);
<TestNode> This is the test text </TestNode>
Чтение xml в dom
В данном уроке я расскажу начальные сведения о формате XML и научу последовательно писать в файл данного формата. Для работы с XML файлом необходимо знать основные принципы составления XML. XML файл можно представить как некоторое дерево, где у каждого элемента есть свой предок. Данный формат очень похож на своего прародителя HTML, в нем действуют такие же принципы, но есть более жесткие ограничение, которые помогли ему стать более простым форматом для передачи данных, чем его предшественники. Например, при сравнении тегов учитывается их регистр, каждый открывающий тег должен иметь закрывающийся и многое другое. Для получения более глубоких знаний по спецификации формата прочитайте статью в разделе термины, так как я буду рассказывать только те вещи, которые необходимы для написания корректного кода.
Рассматривая структуру документа как дерево, мы видим, что "корнем" является:1 <?xml version="1.0"?>
Далее идут различные элементы, которые могут быть как простыми, так и сложными. Простой элемент не содержит в себе других тегов или не содержит сыновей, что означает одно и тоже, смотря в терминах какого языка говорить.
Простой элемент:1 <Student>Alex</Student>
Сложный элемент:1
<department>
<Student>Alex</Student>
</department>
У сложных элементов также могут быть атрибуты, который можно добавить внутрь тега, как и в html:1 <Student ID = "1">Alex</Student>
Научимся делать это в С#. Для этого составим следующий простой XML документ:1
<?xml version="1.0"?>
<!--Это комментарий-->
<university ID="64" Name="SSU">
<StudentCount>1500</StudentCount>
<department Name="CSIT">
<Student>Alex</Student>
</department>
</university>
Для реализации последовательной записи в XML файл будем использовать класс XmlTextWriter. Данный класс имеет множество полезных функций для записи в XML файл. Реализация приведенного выше XML файла осуществляется очень просто: достаточно идти сверху вниз и вызывать соответствующие функции. Если вы видим открывающийся тег, то мы вызываем функции которые начинаются со слов WriteStart, если хотим закрыть текущий тег, то вызываем WriteEndElement(). Для добавления текущему (открытому тегу) элементу атрибута можно использовать функцию writer.WriteAttributeString("Название атрибута", "Значение атрибута"). Рассмотрим весь код в целом:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
namespace XMLPresentation
{
class Program
{
static void Main(string[] args)
{
string path = @"C:\Users\LordRP\Desktop\1.xml";//путь до файла
XmlTextWriter writer = new XmlTextWriter(path, null);//Cоздание writer
writer.Formatting = Formatting.Indented;//использовать форматирование
writer.Indentation = 2;//количество пробелов в файле
writer.WriteStartDocument();//записывает заголовок
writer.WriteComment("Это комментарий");
writer.WriteStartElement("university");
writer.WriteAttributeString("ID", "64");//добавляем атрибут к текущему элементу
writer.WriteAttributeString("Name", "SSU");
writer.WriteElementString("StudentCount", "1500");//простой элемент
writer.WriteStartElement("department");
writer.WriteAttributeString("Name", "CSIT");
writer.WriteElementString("Student", "Alex");//простой элемент
writer.WriteEndElement();//закрываем тег department
writer.WriteEndElement();//закрываем тег university
writer.WriteEndDocument();//закрывает все теги, если такие остались
writer.Close();
}
}
}
