Przegląd LINQ to XMLLINQ to XML overview

LINQ to XML udostępnia interfejs programowania XML w pamięci, który wykorzystuje architekturę programu .NET Language-Integrated Query (LINQ).LINQ to XML provides an in-memory XML programming interface that leverages the .NET Language-Integrated Query (LINQ) Framework. LINQ to XML używa możliwości platformy .NET i jest porównywalna z zaktualizowanym, przeprojektowanym Document Object Model (DOM) interfejsem programowania XML.LINQ to XML uses .NET capabilities and is comparable to an updated, redesigned Document Object Model (DOM) XML programming interface.

Język XML został szeroko przyjęty jako sposób formatowania danych w wielu kontekstach.XML has been widely adopted as a way to format data in many contexts. Na przykład można znaleźć XML w sieci Web, w plikach konfiguracyjnych, w Microsoft Office pliki programu Word i w bazach danych.For example, you can find XML on the Web, in configuration files, in Microsoft Office Word files, and in databases.

LINQ to XML to aktualne, przeprojektowane podejście do programowania w języku XML.LINQ to XML is an up-to-date, redesigned approach to programming with XML. Zapewnia możliwości modyfikacji dokumentów w pamięci Document Object Model (DOM) i obsługuje wyrażenia zapytań LINQ.It provides the in-memory document modification capabilities of the Document Object Model (DOM), and supports LINQ query expressions. Mimo że te wyrażenia zapytania różnią się od składni XPath, zapewniają podobną funkcjonalność.Although these query expressions are syntactically different from XPath, they provide similar functionality.

LINQ to XML deweloperzyLINQ to XML developers

LINQ to XML są przeznaczone dla wielu deweloperów.LINQ to XML targets a variety of developers. W przypadku przeciętnego dewelopera, który po prostu chce uzyskać coś gotowego, LINQ to XML ułatwia tworzenie kodu XML, zapewniając środowisko zapytania podobne do bazy danych SQL.For an average developer who just wants to get something done, LINQ to XML makes XML easier by providing a query experience that's similar to SQL. Mając zaledwie kilka analiz, programiści mogą uczyć się pisać zwięzłe i zaawansowane zapytania w wybranym języku programowania.With just a bit of study, programmers can learn to write succinct and powerful queries in their programming language of choice.

Profesjonalni deweloperzy mogą korzystać z LINQ to XML, aby znacznie zwiększyć swoją produktywność.Professional developers can use LINQ to XML to greatly increase their productivity. Dzięki LINQ to XML mogą pisać mniej kod, który jest bardziej wyraźny, bardziej kompaktowy i bardziej wydajny.With LINQ to XML, they can write less code that's more expressive, more compact, and more powerful. Mogą używać wyrażeń zapytania z wielu domen danych w tym samym czasie.They can use query expressions from multiple data domains at the same time.

LINQ to XML to interfejs programowania XMLLINQ to XML is an XML programming interface

LINQ to XML to interfejs programowania XML obsługujący LINQ, który umożliwia współpracę z danymi XML z poziomu języków programowania .NET.LINQ to XML is a LINQ-enabled, in-memory XML programming interface that enables you to work with XML from within the .NET programming languages.

LINQ to XML przypomina Document Object Model (DOM) w tym, że dokument XML jest umieszczany w pamięci.LINQ to XML is like the Document Object Model (DOM) in that it brings the XML document into memory. Możesz wysyłać zapytania i modyfikować dokument, a po zmodyfikowaniu go można zapisać do pliku lub serializować go i wysłać za pośrednictwem Internetu.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. Jednak LINQ to XML różni się od modelu DOM:However, LINQ to XML differs from DOM:

  • Udostępnia nowy model obiektów, który jest jaśniejszy i łatwiejszy do pracy z.It provides a new object model that's lighter weight and easier to work with.
  • Korzysta ona z funkcji języka w języku C# i Visual Basic.It takes advantage of language features in C# and Visual Basic.

Najważniejszym zaletą LINQ to XML jest integracja z funkcją LINQ (Language-Integrated Query).The most important advantage of LINQ to XML is its integration with Language-Integrated Query (LINQ). Ta Integracja umożliwia pisanie zapytań dotyczących dokumentu XML w pamięci w celu pobrania kolekcji elementów i atrybutów.This integration enables you to write queries on the in-memory XML document to retrieve collections of elements and attributes. Możliwość wykonywania zapytań w LINQ to XML jest porównywalna w funkcji (choć nie w składni) do XPath i XQuery.The query capability of LINQ to XML is comparable in functionality (although not in syntax) to XPath and XQuery. Integracja LINQ w języku C# i Visual Basic zapewnia lepsze wpisywanie, sprawdzanie czasu kompilowania i udoskonaloną obsługę debugera.The integration of LINQ in C# and Visual Basic provides stronger typing, compile-time checking, and improved debugger support.

Kolejną zaletą LINQ to XML jest możliwość używania wyników zapytania jako parametrów do XElement i XAttribute konstruktorów obiektów umożliwia zaawansowane podejście do tworzenia drzew XML.Another advantage of LINQ 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. Takie podejście, nazywane konstrukcją funkcjonalną, umożliwia deweloperom łatwe przekształcanie drzew XML z jednego kształtu do drugiego.This approach, called functional construction, enables developers to easily transform XML trees from one shape to another.

Można na przykład mieć typowe zamówienie zakupu XML, zgodnie z opisem w przykładowym pliku XML: typowe zamówienie zakupu.For example, you might have a typical XML purchase order as described in Sample XML file: Typical purchase order. Za pomocą LINQ to XML można uruchomić następujące zapytanie w celu uzyskania wartości atrybutu numer części dla każdego elementu elementu w zamówieniu zakupu:By using LINQ 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");
' 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

W języku C# można to napisać ponownie w postaci składni metody:In C# this can be rewritten in method syntax form:

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

Innym przykładem może być lista, posortowana według numeru części, dla elementów o wartości większej niż $100.As another example, you might want a list, sorted by part number, of the items with a value greater than $100. Aby uzyskać te informacje, można uruchomić następujące zapytanie: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;
' 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

W języku C# można ponownie napisać w formie składni metody:Again, in C# 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"));

Oprócz tych możliwości LINQ LINQ to XML udostępnia udoskonalony interfejs programowania XML.In addition to these LINQ capabilities, LINQ to XML provides an improved XML programming interface. Za pomocą LINQ to XML można:Using LINQ to XML, you can:

  • Załaduj plik XML z plików lub strumieni.Load XML from files or streams.
  • Serializacja XML do plików lub strumieni.Serialize XML to files or streams.
  • Utwórz plik XML od podstaw przy użyciu konstrukcji funkcjonalnej.Create XML from scratch by using functional construction.
  • Kwerenda XML przy użyciu osi podobnej do XPath.Query XML using XPath-like axes.
  • Manipulowanie drzewem XML w pamięci za pomocą metod takich jak Add , Remove , ReplaceWith i SetValue .Manipulate the in-memory XML tree by using methods such as Add, Remove, ReplaceWith, and SetValue.
  • Sprawdzanie poprawności drzew XML przy użyciu XSD.Validate XML trees using XSD.
  • Aby przekształcić drzewa XML z jednego kształtu na inny, należy użyć kombinacji tych funkcji.Use a combination of these features to transform XML trees from one shape into another.

Tworzenie drzew XMLCreate XML trees

Jedną z najbardziej znaczących zalet programowania przy użyciu LINQ to XML jest łatwość tworzenia drzew XML.One of the most significant advantages of programming with LINQ to XML is that it's easy to create XML trees. Na przykład, aby utworzyć małe drzewo XML, można napisać kod w następujący sposób: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")
        )
    )
);
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>

Uwaga

W Visual Basic wersji tego przykładu są używane literały XML.The Visual Basic version of the example uses XML literals. Można również użyć XElement w Visual Basic, jak w wersji języka C#.You can also use XElement in Visual Basic, as in the C# version.

Aby uzyskać więcej informacji, zobacz drzewa XML.For more information, see XML trees.

Zobacz teżSee also