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 korzysta z funkcji platformy .NET i jest porównywalny ze zaktualizowanym, przeprojektowany interfejsem programowania XML Modelu obiektów dokumentów (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 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 ona możliwości modyfikacji dokumentu w pamięci modelu document Object Model (DOM) i obsługuje wyrażenia zapytań LINQ. Chociaż te wyrażenia zapytania różnią się składniowo od XPath, zapewniają podobne funkcje.

Deweloperzy LINQ to XML

LinQ to XML jest przeznaczony dla różnych deweloperów. Dla przeciętnego dewelopera, który chce zrobić coś, LINQ to XML ułatwia xml, zapewniając środowisko zapytań podobne do języka SQL. Po prostu 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, aby znacznie zwiększyć produktywność. Dzięki LINQ to XML mogą pisać mniej kodu, który jest bardziej ekspresyjny, bardziej kompaktowy i bardziej zaawansowany. Mogą one 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 jak model obiektów dokumentów (DOM), w którym przenosi dokument XML do pamięci. Możesz wykonać zapytanie i zmodyfikować dokument, a następnie zmodyfikować go, możesz zapisać go w pliku lub serializować i wysyłać go za pośrednictwem Internetu. 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ęzykach C# i Visual Basic.

Najważniejszą zaletą LINQ to XML jest integracja z zapytaniem zintegrowanym z językiem (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 języków 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 typowe zamówienie zakupu XML może być opisane w przykładowym pliku XML: Typowe zamówienie zakupu. Używając 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 przepisać w postaci składni metody:

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

W innym przykładzie może być wymagana 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 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. Przy użyciu 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 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 za pomocą LINQ to XML jest ł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

Wersja w języku Visual Basic w przykładzie używa literałów XML. Możesz 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ż