Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.

1 [email protected] Waldemar Bartyna 1 Programowanie zaa...
Author: Seweryn Bielecki
0 downloads 0 Views

1 [email protected] Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML

2 [email protected] Waldemar Bartyna XML  XML (ang. Extensible Markup Language) – rozszerzalny język znaczników – uniwersalny, formalny język przeznaczony do reprezentowania danych w strukturalizowany sposób.  XML stał się standardem jako format, w jakim są przechowywane i przesyłane dane.  Zapewnia całkowitą niezależność od platformy sprzętowej, programowej i systemu operacyjnego. 2

3 [email protected] Waldemar Bartyna Wykorzystanie XML w.NET  Pliki konfiguracyjne aplikacji przechowywane są w formacie XML,  Typ DataSet w technologii ADO.NET pozwala na zapisanie i wczytanie w prosty sposób danych w postaci dokumentów XML,  Windows Presenteation Fundation wykorzystuje gramatykę opartą na XML-u (XAML) do reprezentacji interfejsu graficznego.  Windows Commucication Fundation (jak również oryginalne API zdalnych wywołań) jako sformatowane łańcuchy znaków (XML). 3

4 [email protected] Waldemar Bartyna Specyfikacja W3C  Mimo, że rzeczywiście XML jest powszechnie wykorzystywany, API do jego przetwarzania (zgodne ze specyfikacjami W3C) jest bardzo obszerne i złożone (DOM, SAX, XPath, XQuery, itd.).  Również platforma.NET zapewnia swoją wersję API do przetwarzana XML w pakiecie System.Xml.dll.  Jest ona zgodna ze specyfikacjami W3C (posiada również kilka swoich dodatków: modele XmlReader/XmlWriter). 4

5 [email protected] Waldemar Bartyna LINQ to XML  Tak jak LINQ to SQL integruje manipulowanie relacyjnymi bazami danych bezpośrednio z językiem programowania, tak LINQ to XML chce osiągnąć ten sam rezultat w stosunku do przetwarzania danych zapisanych w formacie XML.  LINQ to XML pozwala na wydobycie podzbioru danych z istniejącego dokumentu XML za pomocą zapytań,  Pozwala również na tworzenie, modyfikowanie i parsowanie XMLowych dokumentów.  LINQ to XML może być postrzegany jako ”lepszy DOM”,  LINQ to SQL może współpracować z typami z ADO.NET. Podobnie LINQ to XML może współpracować z wieloma składowymi pakietu System.Xml.dll. 5

6 [email protected] Waldemar Bartyna Pakiet System.Xml.Linq  Pakiet definiujący przestrzenie nazw związane z LINQ to XML to System.Xml.Linq. Jest on standardowo dołączany do każdego z nowo utworzonych projektów.  Pakiet ten definiuje typy w trzech różnych przestrzeniach nazw: System. Xml.Linq - bazowa przestrzeń zawiera zbór typów reprezentujących różne aspekty dokumentu XML, System.Xml.Schema, System.Xml.Xpath. 6

7 [email protected] Waldemar Bartyna Pakiet System.Xml.Linq (2) 7

8 [email protected] Waldemar Bartyna „DOM-owe API”  Utwórzmy dokument za pomocą API zgodnego z W3C DOM. 8

9 [email protected] Waldemar Bartyna „DOM-owe API” c. d. 9

10 [email protected] Waldemar Bartyna „DOM-owe API” c. d. (2) 10

11 [email protected] Waldemar Bartyna „DOM-owe API” c. d. (3) 11

12 [email protected] Waldemar Bartyna Wynikowy dokument XML 12

13 [email protected] Waldemar Bartyna  Definiowanie tego samego dokumentu za pomocą LINQ to XML. Nowe API (LINQ to XML) 13

14 [email protected] Waldemar Bartyna Cechy nowego AIPI  LINQ to XML, od strony porównania z DOM-owym API, różni się od niego w następujących aspektach: Konstrukcja drzewa XML, Najważniejszy jest element, nie dokument, Definiowanie przestrzeni nazw i prefiksów, Wydobywanie wartości węzłów. 14

15 [email protected] Waldemar Bartyna Funkcyjne konstruowania drzewa XML  W LINQ to XML do konstrukcji drzewa XML stosuje się nową technikę nazwaną konstrukcją funkcyjną.  Pozwala ona na definiowanie schematu podczas konstruowania obiektów XML i inicjalizacji wartości. 15

16 [email protected] Waldemar Bartyna Dokumenty nie są obowiązkowe  W DOM API wymagane jest, aby każdy nowo utworzony element należał do obiektu dokumentu.  W LINQ to XML nie ma takiego obowiązku. Możliwe jest tworzenie i przetwarzanie samych elementów (XElement).  Oczywiście w razie potrzeby możemy również utworzyć dokument. 16

17 [email protected] Waldemar Bartyna Nazwy, przestrzenie nazw i prefiksy  Aby dodać przestrzeń nazw do nazwy elementu wystarczy utworzyć obiekt klasy XNamespace i powiązać go z wybraną nazwą.  Można go również podać bezpośrednio w konstruktorze elementu. 17

18 [email protected] Waldemar Bartyna Nazwy, przestrzenie nazw i prefiksy (2)  Dodajmy przestrzeń nazw do naszego przykładu. 18

19 [email protected] Waldemar Bartyna Nazwy, przestrzenie nazw i prefiksy (3)  Zdefiniowana przestrzeń nazw jest dołączana jako domyślna przestrzeń nazw (bez definicji prefiksu). 19

20 [email protected] Waldemar Bartyna Nazwy, przestrzenie nazw i prefiksy (4)  Jeżeli chcemy zdefiniować prefiks, dodajemy go jako atrybut elementu. 20

21 [email protected] Waldemar Bartyna Wydobywanie wartości węzła  Aby wydobyć wartość węzła wystarczy go rzutować na odpowiedni typ.  Jawne rzutowanie z węzła zostało zdefiniowane dla następujących typów: string, int, int?, uint, uint?, long, long?, ulong, ulong?, bool, bool?, float, float?, double, double?, decimal, decimal?, TimeSpan, TimeSpan?, DateTime, DateTime?, GUID, i GUID?. 21

22 [email protected] Waldemar Bartyna Wydobywanie wartości węzła, przykład 22

23 [email protected] Waldemar Bartyna Model obiektów LINQ to XML 23

24 [email protected] Waldemar Bartyna Tworzenie dokumentu z zapytania LINQ 24

25 [email protected] Waldemar Bartyna Parsowanie, zapisywanie i wczytywanie XMLa 25

26 [email protected] Waldemar Bartyna Nawigowanie po dokumencie 26

27 [email protected] Waldemar Bartyna Modyfikowanie dokumentu 27

28 [email protected] Waldemar Bartyna Modyfikowanie dokumentu, przykład 2 28

29 [email protected] Waldemar Bartyna Obsługa zdarzeń obiektów XML 29

30 [email protected] Waldemar Bartyna Wykorzystanie LINQ 30

31 [email protected] Waldemar Bartyna Dziękuję za uwagę 31