LINQ (Language Integrated Query) jest zbiorem rozszerzeń platformy .NET Framework umożliwiających wykonywanie w łatwy sposób operacji na zbiorach, wyszukiwania, filtrowania czy transformacji danych.
Rozszerzenia te mogą stanowić integralną część języka programowania - tak jest na przykład w przypadku języków C# 3.0 czy VB.NET 9.0 gdzie składnia zapytań LINQ jest zintegrowana ze składnią samego języka. Sposób dostępu do danych i manipulowania tymi danymi jest zazwyczaj zależny od źródła danych. Z tego względu właściwy dostęp do danych jest realizowany w technologii LINQ za pomocą tzw. providerów obsługujących konkretne źródło danych. Otwarta architektura LINQa umożliwia każdemu programiście stworzenie własnego providera. Dzięki temu dostępnych jest sporo providerów - zarówno "oficjalnych" - pochodzących od Microsoftu (np. Linq To Objects, Linq To SQL, Linq to Entities) jak i pochodzących z innych źródeł (np. Linq to Amazon czy Linq to Flickr). Xml nie gęś - swojego providera też ma. Jest to Linq To Xml czasami także nazywany XLinq.
Linq to Xml umożliwia:- Ładowanie dokumentów Xml z zewnętrznych źródeł
- Serializacje dokumentów Xml do zewnętrznych źródeł
- Standardowe operacje na dokumentach Xml (dodawanie, usuwanie węzłów, atrybutów itp.)
- Przeszukiwanie dokumentów (zapytania LINQ)
- Walidację dokumentów za pomocą schem XSD
Podstawy
Rozpoczęcie pracy z Linq to Xml nie jest trudne. Po stworzeniu nowego (lub otwarciu istniejącego) projektu wystarczy zadeklarować użycie przestrzeni nazw System.Xml.Linq (using System.Xml.Linq;) oraz dodać referencje do biblioteki System.Xml.Linq.dll - jeśli takowa jeszcze nie istnieje. Dokument Xml można albo załadować z zewnętrznego źródła albo stworzyć bezpośrednio w programie. Na przykład - jeśli zapiszemy poniższy dokument xml:
<?xml version="1.0"?> <wycieczka> <segment> <wylot kod-lotniska="SEA" data="2008-10-09T15:25Z">Seattle-Tacoma International</wylot> <przylot kod-lotniska="LHR" data="2008-10-10T02:20Z">London Heathrow</przylot> </segment> <segment> <wylot kod-lotniska="LHR" data="2008-10-10T05:35Z">London Heathrow</wylot> <przylot kod-lotniska="WRO" data="2008-10-10T010:05Z">Wroclaw Strachowice</przylot> </segment> </wycieczka>
w pliku o nazwie wycieczka.xml to możemy go załadować w następujący sposób:
XDocument xDoc = XDocument.Load("wycieczka.xml");
Oprócz ładowania dokumentu z pliku istnieje także możliwość załadowania dokumentu z obiektu typu TextReader lub XmlReader. Metoda Load pozwala także na przekazanie dodatkowych opcji sterujących ładowaniem dokumentu (LoadOptions).
Często zdarza się, że dokument xml jest przekazywany w postaci łańcucha znakowego (stringa). W takim przypadku dokument można załadować za pomocą funkcji Parse:
string xmlStr = @"<?xml version=""1.0""?> <wycieczka> <segment><wylot kod-lotniska=""SEA"" data=""2008-10-09T15:25Z"">Seattle-Tacoma International</wylot> <przylot kod-lotniska=""LHR"" data=""2008-10-10T02:20Z"">London Heathrow</przylot> </segment> <segment> <wylot kod-lotniska=""LHR"" data=""2008-10-10T05:35Z"">London Heathrow</wylot> <przylot kod-lotniska=""WRO"" data=""2008-10-10T10:05Z"">Wroclaw Strachowice</przylot> </segment> </wycieczka>"; XDocument xDoc = XDocument.Parse(xmlStr);
Tak jak metoda Load także i ta funkcja pozwala na przekazanie obiektu typu LoadOptions z dodatkowymi ustawieniami wykorzystywanymi podczas parsowania wejściowego dokumentu Xml.
Dokument Xml można także stworzyć bezpośrednio w programie. Dla przykładowego dokumentu kod, który to robi wygląda następująco:
XDocument xDoc =
new XDocument(new XDeclaration("1.0", "", ""),
new XElement("wycieczka",
new XElement("segment",
new XElement("wylot",
new XAttribute("kod-lotniska", "SEA"),
new XAttribute("data", "2008-10-09T15:25Z"),
new XText("Seattle-Tacoma International")),
new XElement("przylot",
new XAttribute("kod-lotniska", "LHR"),
new XAttribute("data", "2008-10-10T02:20Z"),
new XText("London Heathrow"))),
new XElement("segment",
new XElement("wylot",
new XAttribute("kod-lotniska", "LHR"),
new XAttribute("data", "2008-10-10T05:35Z"),
new XText("London Heathrow")),
new XElement("przylot",
new XAttribute("kod-lotniska", "WRO"),
new XAttribute("data", "2008-10-10T010:05Z"),
new XText("Wroclaw Strachowice")))));
Dużą zaletą Linq to Xml jest to, że w przypadku tworzenia dokumentu Xml w ten sposób kod jest o wiele bardziej przejrzysty, czytelny i o wiele krótszy niż to ma miejsce przy tworzeniu dokumentu za pomocą interfejsu Xml Dom.
Artykuł umieszczono dzięki uprzejmości xml.com.pl.







