Курс лекций для студентов специальности i-31 03 04 Информатика всех форм обучения Минск 2010



страница16/29
Дата09.08.2019
Размер0.64 Mb.
#126834
ТипКурс лекций
1   ...   12   13   14   15   16   17   18   19   ...   29

Пространства имен XML


Для описания пространства имён XML в LINQ to XML используется класс XNamespace. У этого класса нет открытого конструктора, но определено неявное приведение строки к XNamespace:

XNamespace ns = "http://astronomy.com/planet";

Чтобы указать на принадлежность имени к определённому пространству имён, следует использовать перегруженную версию оператора +, объединяющую объект XNamespace и строку в результирующий объект XName:

XElement jupiter = new XElement(ns + "name", "Jupiter");

// Jupiter

Префикс пространства имён устанавливается путём добавления в элемент атрибута специального вида. Если префикс задан, им заменяется любое указание пространства имён у дочернего элемента:

XElement planet = new XElement(ns + "planet",

new XAttribute(XNamespace.Xmlns + "p", ns));

planet.Add(new XElement(ns + "name", "Jupiter"));

Console.WriteLine(planet);

//

// Jupiter

//

2.19. ДОполнительные возможности обработки XML


В дополнение к LINQ to XML, платформа .NET содержит несколько программных интерфейсов для работы с XML. Для этого обычно используются классы из пространства имён System.Xml (и пространств вида System.Xml.*).

Классы XmlReader и XmlWriter  это основа механизма последовательного чтения, обработки и записи XML-документов. Такой подход выгодно использовать, когда документ слишком велик, чтобы читать его в память целиком, или содержит ошибки в структуре.

Для последовательного чтения XML-документов применяется класс XmlReader и его наследники: XmlTextReader (чтение на основе текстового потока), XmlNodeReader (разбор XML из объектов XmlNode) и XmlValidatingReader (при чтении производится проверка схемы документа). Обычно для простого чтения XML достаточно класса XmlTextReader. Конструктор класса перегружен и позволяет создать объект на основе указанного файла или текстового потока:

var reader = new XmlTextReader("planets.xml");

Объект XmlTextReader извлекает XML-конструкции из потока при помощи метода Read()1. Тип текущей конструкции можно узнать, используя свойство NodeType, значениями которого являются элементы перечисления XmlNodeType. С конструкцией можно работать, используя различные свойства, такие как Name (возвращает имя элемента или атрибута), Value (возвращает данные элемента) и так далее.

В табл. 15 приведены некоторые значения перечисления XmlNodeType.

Таблица 15

Основные значения перечисления XmlNodeType



Значение

Пример

Attribute

units="days"

CDATA

This is CDATA info ]]>

Comment

первые четыре планеты -->

Document

(корневой элемент)

Element



EndElement



ProcessingInstruction



Text

Mercury

Whitespace

\r \t \n (перевод строки, табуляция)

XmlDeclaration



Следующий пример демонстрирует разбор XML-файла и вывод разобранных конструкций на экран:

var rdr = new XmlTextReader("planets.xml");

while (rdr.Read())

{

switch (rdr.NodeType) // реагируем в зависимости от NodeType



{

case XmlNodeType.XmlDeclaration:

Console.WriteLine("");

break;


case XmlNodeType.Element:

Console.WriteLine("<{0}>", rdr.Name);

break;

case XmlNodeType.Text:



Console.WriteLine(rdr.Value);

break;


case XmlNodeType.EndElement:

Console.WriteLine("", rdr.Name);

break;

case XmlNodeType.Comment:



Console.WriteLine("", rdr.Value);

break;


}

}

Набор методов класса XmlTextReader, начинающихся с префикса Move (MoveToNextElement()), может использоваться для перехода к следующей XML-конструкции в потоке. Вернуться к просмотренным конструкциям нельзя.



Класс XmlWriter – это абстрактный класс для создания XML-данных. Подчеркнем, что XML-данные всегда могут быть сформированы в виде простой строки и затем записаны в любой поток. Однако такой подход не лишен недостатков  возрастает вероятность неправильного формирования структуры XML из-за элементарных ошибок программиста. Класс XmlWriter и его наследники предоставляют более «помехоустойчивый» способ генерации XML-документа. В следующем примере применяется класс XmlTextWriter.

var message = "Hello, dude!";

var xw = new XmlTextWriter("greetings.xml", Encoding.UTF8)

{ Formatting = Formatting.Indented, Indentation = 2 };

xw.WriteStartDocument();

xw.WriteStartElement("greeting");

xw.WriteString(message);

xw.WriteEndElement();

xw.WriteEndDocument();

xw.Flush();

Классы XmlNode, XmlAttribute, XmlElement, XmlDocument служат для представления XML-документа в виде дерева объектов. Программный интерфейс, основанный на использовании данных классов, являлся предшественником LINQ to XML. В связи с этим ограничимся простым примером, демонстрирующим работу с указными классами:

public static void OutputNode(XmlNode node)

{

Console.WriteLine("Type= {0} \t Name= {1} \t Value= {2}",



node.NodeType, node.Name, node.Value);

if (node.Attributes != null)

{

foreach (XmlAttribute attr in node.Attributes)



{

Console.WriteLine("Type={0} \t Name={1} \t Value={2}",

attr.NodeType, attr.Name, attr.Value);

}

}



// если есть дочерние элементы, рекурсивно обрабатываем их

if (node.HasChildNodes)

{

foreach (XmlNode child in node.ChildNodes)



{

OutputNode(child);

}

}

}


// пример использования OutputNode()

var doc = new XmlDocument();

doc.Load("planets.xml");

OutputNode(doc.DocumentElement);



Каталог: images
images -> В списке студентов (или магистрантов)
images -> Н. И. Сулейманов Комплект контрольно-оценочных средств для оценки результатов освоения профессионального модуля разработан на основе Федерального государственного образовательного стандарта среднего профессионального
images -> По направлению подготовки
images -> Добавить гаджеты. Добавление гаджетов
images -> Техническое задание № apnip/C. 2/CS/Ind/01 Международный консультант по улучшенной производительности орошаемого земледелия
images -> Комплект контрольно-оценочных средств по профессиональному модулю пм. 01 Техническое обслуживание и ремонт автотранспорта


Поделитесь с Вашими друзьями:
1   ...   12   13   14   15   16   17   18   19   ...   29




База данных защищена авторским правом ©vossta.ru 2022
обратиться к администрации

    Главная страница