Frage LINQ to XML - Wie funktioniert es?


Meine Frage ist im Wesentlichen eine einfache Frage, obwohl ich hier eine eingehende Antwort für möglich halte: wie geht es? LINQ zu XML Hinter den Kulissen arbeiten?

Nun, ich habe eine Menge Erfahrung mit LINQ to XML für verschiedene Anwendungen gesammelt, so dass Schnittstellen für mich nichts Fremdes sind, aber ich bin ziemlich ahnungslos, wie die Interna funktionieren. Nun, ich habe ein wenig Verständnis für die Funktionsweise von LINQ-Anbietern (Implementierung von IQueryable und IQueryProvider und das Besuchsmuster im Wesentlichen zu verwenden). Allerdings konnte ich nichts über den LINQ-Provider für LINQ to XML herausfinden - auch wenn ich mit Reflector herumgespielt habe, brachte mich das nirgendwohin, obwohl ich vielleicht das Offensichtliche vermisste. Interessanterweise konnte ich keinen Hinweis auf einen LINQ Provider finden (Implementierung von IQueryProvider) innerhalb der System.Xml.Linq Assembly / Namespace.

Aus der Beobachtung des LINQ-zu-XML-Modells ist es mir als eine ziemlich einzigartige Form von LINQ aufgefallen, dass LINQ-Abfragen und die zugehörige Syntax für die Technologie nicht so integral erscheinen und eher auf einem abfragbaren DOM basieren Modell, das viele nützliche Erweiterungsmethoden bietet. Also, was ich zuerst wissen möchte ist, hat LINQ to XML sogar einen Abfrageprovider im Standard-Sinn (den LINQ to SQL zum Beispiel hat), oder ist es im Wesentlichen ein Framework mit Erweiterungsmethoden, auf die Sie noch zugreifen können Verwenden Sie LINQ to Objects, um die Verwendung zu erleichtern. Außerdem bin ich gespannt, wie das Parsen / Konvertieren von XML-Code in die DOM-Hierarchie erfolgt - ist XDocument qutie ähnlich dem alten XmlDocument in diesem Sinne? Verwendet es ein XmlReader oder so hinter den Kulissen, um das Dokument beim Laden zu analysieren und zu interpretieren?

Dies ist eine sehr offene Frage, so dass jede Art von Informationen darüber, wie LINQ to XML hinter den Kulissen funktioniert, sehr willkommen ist. Ich möchte hier vor allem ein Bild davon machen, wie diese spezifische LINQ-Technologie entworfen wurde, damit ich sie später selbst für ein Format mit ähnlicher Struktur wie XML emulieren kann.


11
2018-05-10 11:01


Ursprung


Antworten:


LINQ to XML ist eigentlich nur LINQ to Objects, die an Objekten arbeiten, die XML darstellen. Wenn Sie also beispielsweise eine LINQ-Abfrage schreiben, um Knoten aus einem XDocument abzurufen, rufen Sie nur Erweiterungsmethoden auf, die IEnumerable <T> zurückgeben, und rufen die Standardabfrageoperatoren auf, wie sie für IEnumerable <T> definiert sind.

Man könnte also sagen, dass LINQ-to-XML hauptsächlich aus der XElement-Familie von XML-repräsentierenden Klassen und den vielen Erweiterungsmethoden besteht, die für diese bereitgestellt werden, um Abfragen zu vereinfachen.

Dies wird auch erklärt Hier.


13
2018-05-10 11:20