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 modelu Document Object Model (DOM).

Język XML został powszechnie przyjęty jako sposób formatowania danych w wielu kontekstach. Na przykład można 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 możliwości modyfikacji dokumentu w pamięci modelu DOM (Document Object Model) i obsługuje wyrażenia zapytań LINQ. Mimo że te wyrażenia zapytań różnią się składniowo od XPath, zapewniają podobne funkcje.

deweloperzy LINQ to XML

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

Profesjonalni deweloperzy mogą używać 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 wydajny. Mogą używać wyrażeń zapytań z wielu domen danych w tym samym czasie.

LINQ to XML to interfejs programowania XML

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

LINQ to XML jest podobne do modelu DOM (Document Object Model) 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ć przez Internet. Jednak LINQ to XML różni się od modelu DOM:

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

Najważniejszą zaletą LINQ to XML jest integracja z 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 w funkcjonalności (chociaż nie w 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 do XElement konstruktorów obiektów i XAttribute umożliwia zaawansowane podejście do 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. Korzystając z 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 to napisać 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 z elementami 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 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:

  • Ładowanie kodu XML z plików lub strumieni.
  • Serializowanie kodu XML do plików lub strumieni.
  • Utwórz kod XML od podstaw przy użyciu konstrukcji funkcjonalnej.
  • Wykonywanie zapytań względem kodu XML przy użyciu osi przypominających ścieżkę XPath.
  • Manipuluj 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 w 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 języka Visual Basic w przykładzie używa literałów XML. Można również użyć XElement w języku Visual Basic, tak jak w wersji języka C#.

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

Zobacz też