Поделиться через


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

LINQ to XML предоставляет интерфейс программирования XML в памяти, который использует платформу запросов .NET Language-Integrated (LINQ). LINQ to XML использует возможности .NET и сравним с обновленным, измененным интерфейсом программирования XML-модели объектов документов (DOM).

XML широко используется в качестве способа форматирования данных во многих контекстах. Например, XML можно найти в Интернете, в файлах конфигурации, в файлах Microsoft Office Word и в базах данных.

LINQ to XML — это up-to-date, измененный подход к программированию с помощью 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 является интеграция с Language-Integrated query (LINQ). Эта интеграция позволяет создавать запросы в XML-документе в памяти для получения коллекций элементов и атрибутов. Возможность запроса LINQ to XML сравнима с функциональностью (хотя и не синтаксисом) с XPath и XQuery. Интеграция LINQ в C# и Visual Basic обеспечивает более строгую типизацию, проверку на этапе компиляции и улучшенную поддержку при отладке.

Еще одним преимуществом LINQ to XML является возможность использовать результаты запроса в качестве параметров к конструкторам объектов XElement и XAttribute, что предоставляет мощный подход к созданию 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и ReplaceWithSetValue.
  • Проверка деревьев 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.

См. также