LINQ to XML — przegląd

LINQ to XML udostępnia interfejs programowania XML w pamięci, który korzysta z platformy .NET Language-Integrated Query (LINQ). LINQ to XML używa funkcji platformy .NET i jest porównywalna ze zaktualizowanym, przeprojektowany interfejsem programowania XML document Object Model (DOM).

Język XML został powszechnie przyjęty jako sposób formatowania danych w wielu kontekstach. Można na przykład znaleźć kod XML w sieci Web, w plikach konfiguracji, w plikach Microsoft Office Word i w bazach danych.

LINQ to XML to aktualne, przeprojektowane podejście do programowania przy użyciu języka XML. Zapewnia ona możliwości modyfikacji dokumentu w pamięci modelu obiektów dokumentów (DOM) i obsługuje wyrażenia zapytań LINQ. Mimo że te wyrażenia zapytania są składniowo inne niż XPath, zapewniają one podobną funkcjonalność.

deweloperzy LINQ to XML

LINQ to XML jest przeznaczony dla różnych deweloperów. Przeciętny deweloper, który chce zrobić coś, LINQ to XML ułatwia tworzenie kodu XML, zapewniając środowisko zapytań podobne do SQL. Po prostu trochę nauki, programiści mogą nauczyć się pisać zwięzłe i zaawansowane zapytania w wybranym języku programowania.

Professional deweloperzy mogą korzystać z LINQ to XML w celu znacznego zwiększenia produktywności. Dzięki LINQ to XML mogą pisać mniej kodu, który jest bardziej ekspresyjny, bardziej kompaktowy i bardziej zaawansowany. Mogą używać wyrażeń zapytań z wielu domen danych jednocześnie.

LINQ to XML to interfejs programowania XML

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

LINQ to XML jest jak model obiektów dokumentów (DOM) w tym, że przenosi dokument XML do pamięci. Możesz wykonać zapytanie i zmodyfikować dokument, a po zmodyfikowaniu go można zapisać w pliku lub serializować go i wysłać go przez Internet. Jednak LINQ to XML różni się od modelu DOM:

  • Zapewnia nowy model obiektów, który jest lżejszy i łatwiejszy w pracy.
  • Korzysta z funkcji językowych w języku C# i Visual Basic.

Najważniejszą zaletą LINQ to XML jest integracja Language-Integrated Query (LINQ). Ta integracja umożliwia pisanie zapytań w dokumencie XML w pamięci w celu pobierania kolekcji elementów i atrybutów. Funkcja zapytań LINQ to XML jest porównywalna z funkcjami (chociaż nie składnią) do bibliotek 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 do XElement konstruktorów obiektów i XAttribute umożliwia zaawansowane podejście do tworzenia drzew XML. Takie podejście, nazywane budową 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. Za pomocą LINQ to XML można uruchomić następujące zapytanie, aby uzyskać wartość atrybutu numeru części dla każdego 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 go przepisać w postaci składni metody:

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

W innym przykładzie możesz chcieć, aby lista posortowana według numeru części zawierała elementy o wartości większej niż $100. 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 napisać 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 funkcji LINQ LINQ to XML zapewnia ulepszony interfejs programowania XML. Za pomocą LINQ to XML można wykonywać następujące czynności:

  • Załaduj kod XML z plików lub strumieni.
  • Serializuj kod XML do plików lub strumieni.
  • Utwórz kod XML od podstaw przy użyciu konstrukcji funkcjonalnej.
  • Wykonywanie zapytań dotyczących kodu XML przy użyciu osi podobnych do XPath.
  • Manipulowanie drzewem XML w pamięci przy użyciu metod, takich jak Add, Remove, ReplaceWithi SetValue.
  • Zweryfikuj drzewa 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 z LINQ to XML jest to, że łatwo jest 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

Wersja Visual Basic przykładu używa literałów XML. Można również użyć XElement w Visual Basic, jak w wersji języka C#.

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

Zobacz też