Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры.docx
Скачиваний:
105
Добавлен:
11.05.2015
Размер:
1.13 Mб
Скачать

Операции фильтрации

string[] names = { "Tom", "Dick", "Harry", "Harry" };

var query1 = names.Where((a) => a.Length < 4);

var query2 = names.Take(2);

var query3 = names.Distinct();

var query4 = names.SkipWhile((a) => a[0] !='H');

6.Работа с документами xml

Загрузка документа XML

Классы XElement и XDocument предоставляют статические методы Load и Parse для построения дерева X-DOM из имеющегося источника

  • Load – в качестве источника может выступать файл, ресурс доступный по URI, Stream, TextReader или XmlReader

XDocument xDoc = XDocument.Load("books.xml");

  • Parse - формирует X-DOM дерево из строки

XDocument xDoc = XDocument.Parse("<catalog><item>Value1</item><item>Value2</item></catalog>");

Создание элементов XML

Конструкторы классов XElement и XDocument (а также метод Add класса XContainer) могут принимать переменное число параметров и имеют следующий вид:

public XElement(XName name, params object[] content)

Таким образом можно указывать любое количество дочерних элементов с произвольным типом при создании или редактировании дерева X-DOM.

При обработке передаваемых параметров действуют следующие правила:

  1. Объекты со значением null не обрабатываются

  2. Если объект унаследован от Xnode или XStreamingElement он будет добавлен в коллекцию дочерних элементов Nodes

  3. Ели объект является атрибутом (XAttribute), он будет добавлен в коллекцию Attributes

  4. Если объект является строкой, он будет преобразован к объекту класса XText

  5. Если передаваемый параметр является коллекцией (реализует интерфейс IEnumerable), то будет осуществлен проход по всей коллекции и указанные выше правила будут применены к каждому элементу коллекции

  6. В остальных случаях объект будет преобразован в строку (вызовом метода ToString), затем строка будет преобразована к объекту класса XText и затем добавлен в коллекцию Nodes.

XDocument xDoc = new XDocument(

new XDeclaration("1.0","utf-8","yes"),

new XElement("root",

null,

new XComment("Новый комментарий"),

"Обычный текст",

new XAttribute("id","100"),

new XElement[]

{

new XElement("item", "Первый элемент"),

new XElement("item", 56993)

},

new XCData("<Текст без экранирования>><@@")

));

xDoc.Save("result.xml");

В результате будет получен следующий XML-файл

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

<root id="100">

<!-- Новый комментарий  -->

  Обычный текст

  <item>Первый элемент</item>

  <item>56993</item>

<![CDATA[ <Текст без экранирования>><@@  ]]>

  </root>

Сохранение документа XML

Существует 2 способа сохранить X-DOM дерево:

  • ToString – вызов метода ToString на любом из узлов трансформирует его содержимое в строку XML, отформатированную согласно указанным опциям. В качестве параметра данный метод может принимать объект типа SaveOptions

  • Save – данный метод сохраняет содержимое X-DOM дерева в файл, Stream, TextWriter или XmlWriter.

  • WriteTo – аналогичен методу Save, но в качестве параметра принимает только объект XmlWriter.

XDocument xDoc = XDocument.Parse("<catalog><item>Value1</item><item>Value2</item></catalog>");

string xDocString = xDoc.ToString();

Console.WriteLine(xDocString);

xDoc.Save("example.xml");

using(XmlWriter xmlWriter = new XmlTextWriter("xmlWriter.xml",Encoding.UTF8);)

{

xDoc.WriteTo(xmlWriter);

}

Создание X-DOM из коллекций объектов с использованием LINQ

Структуру X-DOM можно создавать при помощи LINQ используя различные источники данных. В качестве источника данных может выступать любой источник, к которому применимы запросы LINQ:

  • LINQ to SQL или Entity Framework

  • Локальная коллекция с данными

  • Другая структура X-DOM

Необходимо получить документ XML

/*

<customers>

<customer id="1">

<name>Sue</name>

<buys>3</buys>

</customer>

...

</customers>

*/

var customers =

new XElement("customers",

new XElement("customer",

new XAttribute("id", 1),

new XElement("name", "Sue"),

new XElement("buys", 3)

)

);

var customers =

new XElement("customers",

from c in dataContext.Customers

select

new XElement("customer",

new XAttribute("id", c.ID),

new XElement("name", c.Name),

new XElement("buys", c.Purchases.Count)

)

);

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