LINQ to XML — przegląd

LINQ to XML interfejs programowania XML w pamięci, który wykorzystuje platformę .NET Language-Integrated Query (LINQ). LINQ to XML wykorzystuje możliwości programu .NET i jest porównywalny ze zaktualizowanym, przeprojektowanym interfejsem Document Object Model XML (DOM).

Język XML został powszechnie przyjęty jako sposób formatowania danych w wielu kontekstach. Na przykład kod XML można znaleźć w Internecie, w plikach konfiguracji, w plikach programu Microsoft Office word i w bazach danych.

LINQ to XML to aktualne, przeprojektowane podejście do programowania przy użyciu języka XML. Zapewnia możliwości modyfikowania dokumentu w pamięci Document Object Model (DOM) i obsługuje wyrażenia zapytań LINQ. Mimo że te wyrażenia zapytań różnią się syntaktycznie od wyrażenia XPath, zapewniają one podobne funkcje.

LINQ to XML deweloperów

LINQ to XML jest przeznaczony dla różnych deweloperów. Dla średniego dewelopera, który po prostu chce coś zrobić, LINQ to XML kod XML jest łatwiejszy, zapewniając środowisko zapytań podobne do SQL. Po zaledwie kilku badaniach programiści mogą nauczyć się pisać zwięzłe i zaawansowane zapytania w swoim języku programowania.

Professional deweloperzy mogą używać LINQ to XML, aby znacznie zwiększyć swoją produktywność. Dzięki LINQ to XML mogą pisać mniej kodu, który jest bardziej ekspresyjny, bardziej kompaktowy i bardziej wydajny. Mogą używać wyrażeń zapytania z wielu domen danych w tym samym czasie.

LINQ to XML interfejs programowania XML

LINQ to XML to interfejs programowania XML w pamięci z obsługą LINQ, który umożliwia pracę z kodem XML z poziomu języków programowania .NET.

LINQ to XML jest podobny do Document Object Model (DOM), ponieważ wprowadza do pamięci dokument XML. Można wysłać zapytanie i zmodyfikować dokument, a po zmodyfikowaniu go można zapisać go w pliku lub serializować i wysłać go przez Internet. Jednak LINQ to XML się od modelu DOM:

  • Oferuje nowy model obiektów, który jest lżejszy i łatwiejszy w pracy.
  • Wykorzystuje funkcje językowe w języku C# i Visual Basic.

Najważniejszą zaletą usługi LINQ to XML jest integracja z 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. Możliwość wykonywania zapytań w LINQ to XML jest porównywalna z funkcjami (chociaż nie składnią) do XPath i XQuery. Integracja LINQ w języku C# i Visual Basic zapewnia silniejsze wpisywanie, sprawdzanie czasu kompilacji i ulepszoną obsługę debugera.

Kolejną zaletą LINQ to XML jest możliwość używania wyników zapytania jako parametrów konstruktorów obiektów i umożliwia zaawansowane podejście do XElement XAttribute tworzenia drzew XML. Takie podejście, nazywane konstrukcją funkcjonalną, umożliwia deweloperom łatwe przekształcanie drzew XML z jednego kształtu na inny.

Na przykład możesz mieć typowe zamówienie zakupu XML zgodnie z opisem w przykładowym pliku XML: Typowe zamówienie zakupu. Przy użyciu LINQ to XML można uruchomić następujące zapytanie, aby uzyskać wartość atrybutu numeru części dla każdego elementu elementu w zamówieniu zakupu:

// 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 zapisać ponownie w postaci składni metody:

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 elementów o wartości większej niż 100 USD. Aby uzyskać te informacje, możesz uruchomić następujące zapytanie:

// 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

Ponownie w języku C# można to zapisać ponownie w postaci składni metody:

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 interfejs LINQ to XML ulepszony interfejs programowania XML. Za LINQ to XML można:

  • Załaduj kod XML z plików lub strumieni.
  • Serializowanie XML do plików lub strumieni.
  • Tworzenie kodu XML od podstaw przy użyciu konstrukcji funkcjonalnej.
  • Wykonywanie zapytań o kod XML przy użyciu osi podobnych do XPath.
  • Manipuluj drzewem XML w pamięci przy użyciu metod takich jak Add , Remove , i ReplaceWith SetValue .
  • Weryfikowanie drzew XML przy użyciu XSD.
  • Użyj kombinacji tych funkcji, aby przekształcić drzewa XML z jednego kształtu na inny.

Tworzenie drzew XML

Jedną z najważniejszych zalet programowania za pomocą LINQ to XML jest to, że można łatwo tworzyć drzewa XML. Aby na przykład utworzyć małe drzewo XML, możesz napisać kod w następujący sposób:

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 przykładu używane są literały XML. Można go również używać XElement w Visual Basic, tak jak w wersji C#.

Aby uzyskać więcej informacji, zobacz Drzewa XML.

Zobacz też