Общие сведения о LINQ to XML (C#)LINQ to XML Overview (C#)

LINQ to XML обеспечивает интерфейс программирования для работы с XML в памяти на основе платформы .NET LINQ Framework.LINQ to XML provides an in-memory XML programming interface that leverages the .NET Language-Integrated Query (LINQ) Framework. Интерфейс LINQ to XML использует возможности .NET и может быть сравним с обновленным, переработанным программным интерфейсом XML модели DOM.LINQ to XML uses .NET capabilities and is comparable to an updated, redesigned Document Object Model (DOM) XML programming interface.

XML широко используется для форматирования данных в целом ряде контекстов.XML has been widely adopted as a way to format data in many contexts. Примеры XML можно обнаружить в веб-среде, в файлах конфигурации, в файлах Microsoft Office Word и в базах данных.For example, you can find XML on the Web, in configuration files, in Microsoft Office Word files, and in databases.

В LINQ to XMLLINQ to XML реализован современный пересмотренный подход к программированию средствами XML.LINQ to XMLLINQ to XML is an up-to-date, redesigned approach to programming with XML. Он позволяет изменять документы в оперативной памяти на основе модели DOM и поддерживает выражения запросов LINQ.It provides the in-memory document modification capabilities of the Document Object Model (DOM), and supports LINQ query expressions. Хотя в синтаксическом отношении эти выражения запросов отличаются от XPath, они предоставляют аналогичные функциональные возможности.Although these query expressions are syntactically different from XPath, they provide similar functionality.

Разработчики, использующие LINQ to XMLLINQ to XML Developers

LINQ to XMLLINQ to XML предназначен для различных категорий разработчиков.targets a variety of developers. С точки зрения среднестатистического разработчика, заинтересованного в решении той или иной задачи, LINQ to XMLLINQ to XML облегчает обработку XML, поскольку дает возможность получить опыт работы с запросами, аналогичный опыту работы с языком SQL.For an average developer who just wants to get something done, LINQ to XMLLINQ to XML makes XML easier by providing a query experience that is similar to SQL. Посвятив совсем немного времени изучению предмета, программисты могут научиться составлять сжатые и мощные запросы на предпочитаемом ими языке программирования.With just a bit of study, programmers can learn to write succinct and powerful queries in their programming language of choice.

Профессиональные разработчики могут с помощью LINQ to XMLLINQ to XML существенно повысить производительность своего труда.Professional developers can use LINQ to XMLLINQ to XML to greatly increase their productivity. Используя LINQ to XMLLINQ to XML, они могут сократить объемы необходимого кода и сделать его более выразительным, более компактным и более мощным.With LINQ to XMLLINQ to XML, they can write less code that is more expressive, more compact, and more powerful. Они могут одновременно использовать выражения запросов из нескольких доменов данных.They can use query expressions from multiple data domains at the same time.

Что такое LINQ to XML?What Is LINQ to XML?

LINQ to XMLLINQ to XML — это оснащенный средствами LINQ и встроенный в память программный интерфейс XML, позволяющий работать с XML-файлами изнутри языков программирования .NET.is a LINQ-enabled, in-memory XML programming interface that enables you to work with XML from within the .NET programming languages.

LINQ to XMLLINQ to XML подобен модели DOM в том отношении, что загружает XML-документ в память.is like the Document Object Model (DOM) in that it brings the XML document into memory. К такому документу можно направить запрос, его можно изменить, а после изменения его можно сохранить в файле или сериализовать и передать через Интернет.You can query and modify the document, and after you modify it you can save it to a file or serialize it and send it over the Internet. Но между LINQ to XMLLINQ to XML и моделью DOM существуют отличия: Интерфейс реализует облегченную и более простую в работе модель объектов; кроме того, в нем используются преимущества языковых возможностей, реализованные в C#.However, LINQ to XMLLINQ to XML differs from DOM: It provides a new object model that is lighter weight and easier to work with, and that takes advantage of language features in C#.

Важнейшее достоинство LINQ to XMLLINQ to XML представлено интеграцией с LINQ.The most important advantage of LINQ to XMLLINQ to XML is its integration with Language-Integrated Query (LINQ). Эта интеграция дает возможность создавать запросы к загруженному в память XML-документу с целью получения коллекций элементов и атрибутов.This integration enables you to write queries on the in-memory XML document to retrieve collections of elements and attributes. По своей функциональности (но не по синтаксису) реализованные в LINQ to XMLLINQ to XML возможности формирования запросов сопоставимы с возможностями XPath и XQuery.The query capability of LINQ to XMLLINQ to XML is comparable in functionality (although not in syntax) to XPath and XQuery. Интеграция LINQ в C# обеспечивает более строгую типизацию, проверку во время компиляции и улучшенную поддержку отладчика.The integration of LINQ in C# provides stronger typing, compile-time checking, and improved debugger support.

Другим преимуществом LINQ to XMLLINQ to XML является то, что возможность использования результатов запросов в качестве параметров конструкторов объектов XElement и XAttribute позволяет применять мощный подход для создания XML-деревьев.Another advantage of LINQ to XMLLINQ to XML is the ability to use query results as parameters to XElement and XAttribute object constructors enables a powerful approach to creating XML trees. Этот подход, известный как функциональное построение, дает разработчикам возможность легко преобразовывать деревья XML из одной формы в другую.This approach, called functional construction, enables developers to easily transform XML trees from one shape to another.

Пусть имеется типичный заказ на покупку в формате XML, как это описано в статье Пример XML-файла. Типичный заказ на покупку (LINQ to XML).For example, you might have a typical XML purchase order as described in Sample XML File: Typical Purchase Order (LINQ to XML). С помощью интерфейса LINQ to XMLLINQ to XML можно выполнить следующий запрос для получения значения атрибута артикула для каждого элемента в заказе на покупку:By using LINQ to XMLLINQ to XML, you could run the following query to obtain the part number attribute value for every item element in the purchase order:

// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<string> partNos =  from item in purchaseOrder.Descendants("Item")
                               select (string) item.Attribute("PartNumber");

Это можно переписать в форме синтаксиса метода:This can be rewritten in method syntax form:

IEnumerable<string> partNos = purchaseOrder.Descendants("Item").Select(x => (string) x.Attribute("PartNumber"));

Еще один пример. Пусть требуется сформировать отсортированный в соответствии с номерами деталей список продуктов стоимостью выше 100 долл.As another example, you might want a list, sorted by part number, of the items with a value greater than $100. Для получения этих сведений можно выполнить следующий запрос:To obtain this information, you could run the following query:

// Load the XML file from our project directory containing the purchase orders
var filename = "PurchaseOrder.xml";
var currentDirectory = Directory.GetCurrentDirectory();
var purchaseOrderFilepath = Path.Combine(currentDirectory, filename);

XElement purchaseOrder = XElement.Load(purchaseOrderFilepath);

IEnumerable<XElement> pricesByPartNos =  from item in purchaseOrder.Descendants("Item")
                                 where (int) item.Element("Quantity") * (decimal) item.Element("USPrice") > 100
                                 orderby (string)item.Element("PartNumber")
                                 select item;

Опять же, это можно переписать в форме синтаксиса метода:Again, this can be rewritten in method syntax form:

IEnumerable<XElement> pricesByPartNos = purchaseOrder.Descendants("Item")
                                        .Where(item => (int)item.Element("Quantity") * (decimal)item.Element("USPrice") > 100)
                                        .OrderBy(order => order.Element("PartNumber"));

В дополнение к функциям, реализованным в LINQ, LINQ to XMLLINQ to XML предоставляет усовершенствованный интерфейс программирования XML.In addition to these LINQ capabilities, LINQ to XMLLINQ to XML provides an improved XML programming interface. Благодаря LINQ to XMLLINQ to XML появляются следующие возможности:Using LINQ to XMLLINQ to XML, you can:

  • Загрузка XML из файлов или из потоков.Load XML from files or streams.

  • Сериализация XML в файлы или в потоки.Serialize XML to files or streams.

  • Создание XML-кодов «с чистого листа» с помощью функционального построения.Create XML from scratch by using functional construction.

  • Обращение с запросами к XML с помощью XPath-подобных осей.Query XML using XPath-like axes.

  • Манипулирование загруженным в память XML-деревом с помощью таких методов, как Add, Remove, ReplaceWith и SetValue.Manipulate the in-memory XML tree by using methods such as Add, Remove, ReplaceWith, and SetValue.

  • Проверка XML-деревьев с помощью XSD.Validate XML trees using XSD.

  • Использование сочетания этих функций для преобразования XML-деревьев из одной формы в другую.Use a combination of these features to transform XML trees from one shape into another.

Создание деревьев XMLCreating XML Trees

Одним из наиболее важных преимуществ программирования с использованием LINQ to XMLLINQ to XML является простота создания XML-деревьев.One of the most significant advantages of programming with LINQ to XMLLINQ to XML is that it is easy to create XML trees. Так, для создания небольшого дерева XML можно написать следующий код:For example, to create a small XML tree, you can write code as follows:

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")
        )
    )
);

Дополнительные сведения см. в разделе Создание деревьев XML (C#).For more information, see Creating XML Trees (C#).

См. такжеSee also