Общие сведения о LINQ to XML
XML широко используется для форматирования данных в целом ряде контекстов. Примеры XML можно обнаружить в веб-среде, в файлах конфигурации, в файлах Microsoft Office Word и в базах данных.
В LINQ to XML реализован современный пересмотренный подход к программированию средствами XML. Кроме того, реализованы встроенные в память возможности модификации документов модели DOM, поддерживаются выражения запросов LINQ. Хотя в синтаксическом отношении эти выражения запросов отличаются от XPath, они предоставляют аналогичные функциональные возможности.
Разработчики, использующие LINQ to XML
LINQ to XML предназначен для различных категорий разработчиков. С точки зрения среднестатистического разработчика, заинтересованного в решении той или иной задачи, LINQ to XML облегчает обработку XML, поскольку дает возможность получить опыт работы с запросами, аналогичный опыту работы с языком SQL. Посвятив совсем немного времени изучению предмета, программисты могут научиться составлять сжатые и мощные запросы на предпочитаемом ими языке программирования.
Профессиональные разработчики могут с помощью LINQ to XML существенно повысить производительность своего труда. Используя LINQ to XML, они могут сократить объемы необходимого кода и сделать его более выразительным, более компактным и более мощным. Они могут одновременно использовать выражения запросов из нескольких доменов данных.
Что такое LINQ to XML?
LINQ to XML - это оснащенный средствами LINQ и встроенный в память программный интерфейс XML, позволяющий работать с XML-файлами внутри языков программирования .NET Framework.
LINQ to XML подобен модели DOM в том отношении, что загружает XML-документ в память. К такому документу можно направить запрос, его можно изменить, а после изменения его можно сохранить в файле или сериализовать и передать через Интернет. Однако между интерфейсом LINQ to XML и моделью DOM существуют отличия: интерфейс реализует более легкую и простую в работе модель объектов. Кроме того, в нем используются преимущества, реализованные в Visual C# 2008.
Важнейшее достоинство LINQ to XML состоит в его интеграции с LINQ. Эта интеграция дает возможность создавать запросы к загруженному в память XML-документу с целью получения коллекций элементов и атрибутов. По своей функциональности (но не по синтаксису) реализованные в LINQ to XML возможности формирования запросов сопоставимы с возможностями XPath и XQuery. Благодаря интеграции LINQ в Visual C# 2008 обеспечивается более строгая типизация, проверка во время компиляции и улучшенная поддержка отладчика.
Другим преимуществом LINQ to XML является то, что возможность использования результатов запросов в качестве параметров конструкторов объектов XElement и XAttribute позволяет применять мощный подход для создания XML-деревьев. Этот подход, именуемый функциональное построение, дает разработчикам возможность легко преобразовывать XML-деревья из одной формы в другую.
Пусть имеется типичный заказ на покупку в формате XML, как это описано в Образец XML-файла. Стандартный заказ на покупку (LINQ to XML). С помощью интерфейса LINQ to XML можно выполнить следующий запрос для получения значения атрибута артикула для каждого элемента в заказе на покупку:
IEnumerable<string> partNos =
from item in purchaseOrder.Descendants("Item")
select (string) item.Attribute("PartNumber");
В Visual Basic этот же запрос можно написать следующим образом:
Dim partNos = _
From item In purchaseOrder...<Item> _
Select item.@PartNumber
Еще один пример. Пусть требуется сформировать отсортированный в соответствии с номерами деталей список продуктов стоимостью выше 100 долл. Для получения этих сведений можно выполнить следующий запрос:
IEnumerable<XElement> partNos =
from item in purchaseOrder.Descendants("Item")
where (int) item.Element("Quantity") *
(decimal) item.Element("USPrice") > 100
orderby (string)item.Element("PartNumber")
select item;
В Visual Basic этот же запрос можно написать следующим образом:
Dim partNos = _
From item In purchaseOrder...<Item> _
Where (item.<Quantity>.Value * _
item.<USPrice>.Value) > 100 _
Order By item.<PartNumber>.Value _
Select item
В дополнение к функциям, реализованным в LINQ, LINQ to XML предоставляет усовершенствованный интерфейс программирования XML. Благодаря LINQ to XML появляются следующие возможности:
Загрузка XML из файлов или из потоков.
Сериализация XML в файлы или в потоки.
Создание XML-кодов «с чистого листа» с помощью функционального построения.
Обращение с запросами к XML с помощью XPath-подобных осей.
Манипулирование загруженным в память XML-деревом с помощью таких методов, как Add, Remove, ReplaceWith и SetValue.
Проверка XML-деревьев с помощью XSD.
Использование сочетания этих функций для преобразования XML-деревьев из одной формы в другую.
Создание деревьев XML
Одним из наиболее важных преимуществ программирования с использованием LINQ to XML является простота создания XML-деревьев. Так, для создания небольшого XML-дерева можно написать следующий код C#:
XElement contacts =
new XElement("Contacts",
new XElement("Contact",
new XElement("Name", "Patrick Hines"),
new XElement("Phone", "206-555-0144",
new XAttribute("Type", "Home")),
new XElement("phone", "425-555-0145",
new XAttribute("Type", "Work")),
new XElement("Address",
new XElement("Street1", "123 Main St"),
new XElement("City", "Mercer Island"),
new XElement("State", "WA"),
new XElement("Postal", "68042")
)
)
);
В Visual Basic код для построения XML-дерева еще проще, так как он использует XML-литерал.
Dim contacts = _
<Contacts>
<Contact>
<Name>Patrick Hines</Name>
<Phone Type="Home">206-555-0144</Phone>
<Phone Type="Work">425-555-0145</Phone>
<Address>
<Street1>123 Main St</Street1>
<City>Mercer Island</City>
<State>WA</State>
<Postal>68042</Postal>
</Address>
</Contact>
</Contacts>
Компилятор Visual Basic транслирует XML-литералы в вызовы методов LINQ to XML.
Для получения дополнительной информации см. Создание XML-деревьев.
См. также
Ссылки
Основные понятия
Общие сведения о LINQ to XML в Visual Basic