- •Лекция 5. Создание xml-документов в .Net
- •1. Использование класса XmlWriter - запись потоков данных Xml
- •2. Использование dom в .Net
- •2.1. Чтение xml-документа с помощью XmlNodeList
- •2.2. Вставка элементов (узлов) в xml- документ
- •3. Обработка атрибутов
- •3.1. Извлечение атрибутов с помощью XmlReader
- •3.2. Вставка атрибутов в документ с помощью XmlWriter
3. Обработка атрибутов
Обычно атрибуты не рассматриваются как часть структуры документа. Но, при необходимости, можно определить их наличие и извлечь значения. Для извлечения и записи атрибутов можно (как для элементов) использовать классы XmlReader, XmlWriter, а также XmlDocument.
3.1. Извлечение атрибутов с помощью XmlReader
В таблице перечислены некоторые свойства и методы для обработки атрибутов.
HasAttributes |
свойство. Возвращает значение true, если элемент имеет атрибуты и false – если нет |
AttributeCount |
свойство. Сообщает сколько атрибутов имеет элемент |
GetAttribute() |
метод. Извлекает атрибут по имени или по индексу |
MoveToFirstAttribute() |
метод. Позволяет перейти к первому атрибуту |
MoveToNextAttribute() |
метод. Позволяет перейти к следующему атрибуту |
Для демонстрации этих возможностей добавим в XML-файл booknew.xml в элемент book атрибуты:
<?xml version="1.0" encoding="utf-8"?>
<Catalog>
<book genre="Программная инженерия" yearpublic="2006" >
<title>Основы инженерии качества программных систем</title>
<author>
<name>Коротун Т.М.</name>
<name>Коваль Г.И.</name>
</author>
<price>120.00</price>
</book>
</Catalog>
Откроем предыдущий проект Windows-XML.
Добавим на форму еще одну кнопку для извлечения атрибутов из элемента book. В обработчик кнопки вставим код:
private void btnAttr_Click(object sender, EventArgs e)
{
//извлечение атрибутов из элемента
richTextBox1.Clear();
XmlReader rdr = XmlReader.Create("booknew.xml");
//чтение узлов
while (rdr.Read())
{
//проверить, не является ли он узлом
if (rdr.NodeType == XmlNodeType.Element)
{
//Если это элемент, проверит его атрибуты
for (int i = 0; i < rdr.AttributeCount; i++)
{
richTextBox1.AppendText(rdr.GetAttribute(i) + "\r\n");
}
}
}
rdr.Close();
}
3.2. Вставка атрибутов в документ с помощью XmlWriter
Добавим на форму кнопку WriteAttributes. Обработчик кнопки создает новый файл booknew.xml, в котором размещается документ Catalog, состоящий из одного вложенного элемента book. В элементе book есть два атрибута "genre" и "yearpublic". Метод WriteAttributeString() добавляет атрибут к элементу.
private void btmWriteAtt_Click(object sender, EventArgs e)
{
// запись в файл с атрибутами
XmlWriterSettings setting = new XmlWriterSettings();
setting.Indent = true;
string fname = "booknew.xml";
XmlTextWriter writer = new XmlTextWriter(fname, null);
writer.Formatting = Formatting.Indented;
writer.WriteStartDocument();
//начало создания єлементов
writer.WriteStartElement("Catalog");
writer.WriteStartElement("book");
writer.WriteAttributeString("genre", "Программная инженерия");
writer.WriteAttributeString("yearpublic", "2006");
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();
}
В результате будет создан файл booknew.xml, содержащий описание книги.
Другой способ добавления и извлечения атрибутов – применение модели DOM (класс XmlDocument).
Выводы
Классы C# обеспечивают разные способы обработки Xml-документов. Кроме рассмотренных в лекции, в .NetFramework есть классы для создания схем документов, проверки документов на соответствие схеме, поиск информации по содержимому(XPath и XslTransform), обработку запросов, взаимодействие с базой данных.
