Übersicht über LINQ to XML

LINQ to XML stellt eine XML-Programmierschnittstelle im Arbeitsspeicher bereit, die das .NET Language-Integrated Query-Framework (LINQ) nutzt. LINQ to XML verwendet die neuesten .NET-Funktionen und ist mit einer aktualisierten und neu gestalteten DOM-XML-Programmierschnittstelle vergleichbar.

XML hat sich mittlerweile als hervorragende Möglichkeit durchgesetzt, Daten in einer Vielzahl von Kontexten zu formatieren. Sie finden XML beispielsweise im Internet, in Konfigurationsdateien, in Microsoft Office Word-Dateien und in Datenbanken.

Mit LINQ to XML steht Ihnen ein topaktueller, völlig neu gestalteter Ansatz für die Programmierung mit XML zur Verfügung. Dabei werden die arbeitsspeicherinternen Dokumentänderungsfunktionen des Dokumentobjektmodells (DOM) bereitgestellt und LINQ-Abfrageausdrücke unterstützt. Obwohl sich diese Abfrageausdrücke syntaktisch von XPath unterscheiden, bieten sie eine ähnliche Funktionalität.

LINQ to XML-Entwickler*innen

LINQ to XML richtet sich an eine Vielzahl von Entwickler*innen. Für ganz normale Entwickler*innen, die einfach eine Aufgabe erledigen möchten, vereinfacht LINQ to XML das Arbeiten mit XML, weil Abfragen ähnlich wie in SQL gehandhabt werden. Programmierer werden so innerhalb kurzer Zeit in die Lage versetzt, kompakte und dennoch leistungsfähige Abfragen in der Programmiersprache ihrer Wahl zu erstellen.

Professionelle Entwickler*innen können mit LINQ to XML ihre Produktivität deutlich steigern. Mit LINQ to XML muss weniger Code geschrieben werden, und dieser Code ist ausdrucksvoller, kompakter und leistungsstärker. Sie können Abfrageausdrücke aus mehreren Datendomänen gleichzeitig verwenden.

LINQ to XML ist eine XML-Programmierschnittstelle.

LINQ to XML ist eine LINQ-fähige In-Memory-XML-Programmierschnittstelle, mit der Sie aus .NET-Programmiersprachen heraus mit XML arbeiten können.

LINQ to XML ähnelt dem Dokumentobjektmodell (DOM) darin, dass das XML-Dokument im Arbeitsspeicher bereitgestellt wird. Sie können das Dokument abfragen und ändern, und nach dem Ändern können Sie es in einer Datei speichern oder es serialisieren und über das Internet versenden. Allerdings unterscheidet sich LINQ to XML von DOM:

  • Es bietet ein neues Objektmodell, das leichter und einfacher zu verwenden ist.
  • Es nutzt Sprachfeatures in C# und Visual Basic.

Der wichtigste Vorteil von LINQ to XML besteht jedoch in dessen Integration in LINQ (Language Integrated Query). Diese Integration ermöglicht es Ihnen, Abfragen für das XML-Dokument im Arbeitsspeicher zu schreiben, um Auflistungen von Elementen und Attributen abzurufen. Die Abfragefunktion von LINQ to XML ist von ihrer Funktionalität her mit der von XPath und XQuery vergleichbar – die Syntax ist allerdings eine andere. Die Integration von LINQ in C# und Visual Basic bietet eine stärkere Typisierung, Syntaxüberprüfung bei der Kompilierung und verbesserte Debuggerunterstützung.

Ein weiterer Vorteil von LINQ to XML ist die Fähigkeit, Abfrageergebnisse als Parameter für XElement- und XAttribute-Objektkonstruktoren zu verwenden. Dies ist ein sehr effizienter Ansatz zum Erstellen von XML-Strukturen. Diese Herangehensweise, die als funktionale Konstruktion bezeichnet wird, versetzt Entwickler in die Lage, XML-Strukturen problemlos von einer Form in eine andere zu transformieren.

Angenommen, Ihnen liegt eine typische XML-Bestellung, wie in XML-Beispieldatei: Typische Bestellung vor. Durch die Verwendung von LINQ to XML können Sie zum Abrufen des Attributwerts der Teilenummer für jedes Artikelelement im Auftrag die folgende Abfrage ausführen:

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

In C# kann dies in das Methodensyntaxformat umgeschrieben werden:

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

Ein anderes Beispiel: Sie möchten, sortiert nach Teilenummer, eine Liste der Artikel abfragen, deren Wert über 100 Dollar liegt. Zum Abfragen dieser Informationen könnten Sie die folgende Abfrage ausführen:

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

Erneut kann dies in C# in das Methodensyntaxformat umgeschrieben werden:

IEnumerable<XElement> pricesByPartNos = purchaseOrder.Descendants("Item")
                                        .Where(item => (int)item.Element("Quantity") * (decimal)item.Element("USPrice") > 100)
                                        .OrderBy(order => order.Element("PartNumber"));

Zusätzlich zu diesen LINQ-Funktionen stellt LINQ to XML eine verbesserte XML-Programmierschnittstelle bereit. Mit LINQ to XML haben Sie folgende Möglichkeiten:

  • Laden Sie XML aus Dateien oder Streams.
  • XML in Dateien oder Streams serialisieren
  • XML mittels funktionaler Konstruktion von Grund auf neu erstellen
  • XML mit XPath-ähnlichen Achsen abfragen
  • XML-Strukturen im Arbeitsspeicher mit Methoden wie Add, Remove, ReplaceWith und SetValue bearbeiten
  • XML-Strukturen mit XSD validieren
  • XML-Strukturen mit einer Kombination aus diesen Funktionen von einer Form in eine andere transformieren

Erstellen von XML-Strukturen

Einer der bedeutendsten Vorteile beim Programmieren mit LINQ to XML ist die einfache Erstellung von XML-Strukturen. Wenn Sie z.B. eine kleine XML-Struktur erstellen möchten, können Sie einen Code wie im folgenden Beispiel schreiben:

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>

Hinweis

Die Visual Basic-Version des Beispiels verwendet XML-Literale. Sie können auch XElement in Visual Basic wie in der C#-Version verwenden.

Weitere Informationen finden Sie unter XML-Strukturen.

Weitere Informationen