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

LINQ to XML обеспечивает интерфейс программирования для работы с XML в памяти на основе платформы .NET LINQ Framework. Интерфейс LINQ to XML использует возможности .NET и может быть сравним с обновленным, переработанным программным интерфейсом XML модели DOM.

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 — это интерфейс программирования XML

LINQ to XML — это интерфейс программирования XML с поддержкой LINQ, который позволяет работать с XML на языках программирования .NET.

LINQ to XML похож на объектную модель документа (DOM), в которую он переносит XML-документ в память. К такому документу можно направить запрос, его можно изменить, а после изменения его можно сохранить в файле или сериализовать и передать через Интернет. Однако LINQ to XML отличается от DOM:

  • Он предоставляет новую объектную модель, которая легче весить и проще работать.
  • Он использует преимущества языковых функций в C# и Visual Basic.

Наиболее важным преимуществом LINQ to XML является интеграция с языковым интегрированным запросом (LINQ). Эта интеграция дает возможность создавать запросы к загруженному в память XML-документу с целью получения коллекций элементов и атрибутов. Возможность запроса LINQ to XML сравнима с функциональностью (хотя и не синтаксисом) с XPath и XQuery. Интеграция LINQ с C# и Visual Basic обеспечивает более надежную типы, проверка компиляцию и улучшенную поддержку отладчика.

Еще одним преимуществом LINQ to XML является возможность использовать результаты запроса в качестве параметров и XElementXAttribute конструкторов объектов позволяет эффективно использовать подход к созданию деревьев XML. Этот подход, известный как функциональное построение, дает разработчикам возможность легко преобразовывать деревья XML из одной формы в другую.

Например, у вас может быть типичный xml-заказ на покупку, как описано в примере XML-файла: типичный заказ на покупку. С помощью LINQ to XML можно выполнить следующий запрос, чтобы получить значение атрибута номера части для каждого элемента в заказе на покупку:

// 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");
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)

Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)

Dim partNos = _
    From item In purchaseOrder...<Item> _
    Select item.@PartNumber

В C# это можно переписать в форме синтаксиса метода:

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

Еще один пример. Пусть требуется сформировать отсортированный в соответствии с номерами деталей список продуктов стоимостью выше 100 долл. Для получения этих сведений можно выполнить следующий запрос:

// 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;
' Load the XML file from our project directory containing the purchase orders
Dim filename = "PurchaseOrder.xml"
Dim currentDirectory = Directory.GetCurrentDirectory()
Dim purchaseOrderFilepath = Path.Combine(currentDirectory, filename)

Dim purchaseOrder As XElement = XElement.Load(purchaseOrderFilepath)

Dim partNos = _
From item In purchaseOrder...<Item> _
Where (item.<Quantity>.Value * _
       item.<USPrice>.Value) > 100 _
Order By item.<PartNumber>.Value _
Select item

Опять же, в C# это можно переписать в форме синтаксиса метода:

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 XML предоставляет улучшенный интерфейс программирования XML. С помощью LINQ to XML можно:

  • Загрузка XML из файлов или из потоков.
  • Сериализация XML в файлы или в потоки.
  • Создание XML-кодов «с чистого листа» с помощью функционального построения.
  • Обращение с запросами к XML с помощью XPath-подобных осей.
  • Манипулирование загруженным в память XML-деревом с помощью таких методов, как Add, Remove, ReplaceWith и SetValue.
  • Проверка XML-деревьев с помощью XSD.
  • Использование сочетания этих функций для преобразования XML-деревьев из одной формы в другую.

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

Одним из наиболее важных преимуществ программирования с помощью LINQ to XML является то, что легко создавать деревья XML. Так, для создания небольшого дерева XML можно написать следующий код:

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")
        )
    )
);
Dim contacts As XElement = _
    <Contacts>
        <Contact>
            <Name>Patrick Hines</Name>
            <Phone>206-555-0144</Phone>
            <Address>
                <Street1>123 Main St</Street1>
                <City>Mercer Island</City>
                <State>WA</State>
                <Postal>68042</Postal>
            </Address>
        </Contact>
    </Contacts>

Примечание.

В версии Visual Basic примера используются XML-литералы. Вы также можете использовать XElement в Visual Basic, как и в версии C#.

Дополнительные сведения см. в деревах XML.

См. также