Общие сведения о 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 (Language-Integrated Query). Эта интеграция дает возможность создавать запросы к загруженному в память 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-деревьев.

См. также

Ссылки

System.Xml.Linq

Основные понятия

Общие сведения о LINQ to XML в Visual Basic

Другие ресурсы

Приступая к работе (LINQ to XML)

XML в Visual Basic