LINQ TO XML. Autor ćwiczenia: Marcin Wolicki



Podobne dokumenty
Zaawansowane aplikacje WWW - laboratorium

Generowanie dokumentów XML z tabel relacyjnych - funkcje SQLX

Katalog książek cz. 2

Db4o obiektowa baza danych wersja.net

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

Wprowadzenie do Doctrine ORM

XML w.net. Dominik Baś nr alb Wrocław, 29 maja 2007

Leszek Stasiak Zastosowanie technologii LINQ w

Ćwiczenie rozpocznie się od wprowadzenia do laboratorium, po którym omówimy składnię ę polecenia INSERT pozwalającego ą na wstawianie krotek do

Aplikacje WWW - laboratorium

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

2. Wyświetlić wyłącznie liczby ujemne zawarte w tablicy tabl[]. 3. Wyświetlić rosnąco liczby ujemne zawarte w tablicy tabl[].

Projektowanie aplikacji internetowych laboratorium

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Informatyka I : Tworzenie projektu

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Zaawansowane aplikacje internetowe - laboratorium

Przykład powyżej pokazuje, że w zapytaniu można umieszczać funkcje zarówno zdefiniowane w ramach środowiska, jak również własne.

TEMAT ĆWICZENIA Zapoznanie z technologią LINQ

Platforma.NET. Laboratorium nr 1 Podstawy języka C#

Wykład 12. Programowanie serwera MS SQL 2005 w C#

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

WPROWADZENIE DO JĘZYKA JAVA

Skopiuj plik do katalogu macierzystego serwera Apache (C:/xampp/htdocs). Uruchom przeglądarkę i wpisz w polu adresowym następujący ciąg:

Ćwiczenie zapytań języka bazy danych PostgreSQL

Zaawansowane aplikacje internetowe

XML-owe bazy danych ćwiczenia 1

MATERIAŁY DO ZAJĘĆ I. Podstawowe pojęcia. Algorytm. Spis treści Przepis

Programowanie obiektowe zastosowanie języka Java SE

I - Microsoft Visual Studio C++

Wprowadzenie do laboratorium. Zasady obowiązujące na zajęciach. Wprowadzenie do narzędzi wykorzystywanych podczas laboratorium.

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Microsoft.NET: LINQ to SQL, ASP.NET AJAX

Zadania: 1. Funkcja przeliczająca F na C: float FtoC(float f){ return (f 32.0) * 5.0 / 9.0; }

I. WSTĘP. Przykład 1. Przykład 2. Programowanie czyli tworzenie programów komputerowych (aplikacji komputerowych)

Instrukcja pomocnicza

Metody Metody, parametry, zwracanie wartości

akademia androida Składowanie danych część VI

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Web Services (SOAP) Ćwiczenie 1

Aplikacje internetowe laboratorium XML, DTD, XSL

ZAPOZNANIE SIĘ ZE SPOSOBEM PRZECHOWYWANIA

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Aplikacje WWW - laboratorium

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Język SQL Złączenia. Laboratorium. Akademia Morska w Gdyni

Język SQL. Rozdział 4. Funkcje grupowe Funkcje grupowe, podział relacji na grupy, klauzule GROUP BY i HAVING.

Podstawowe funkcje dodatku linq w C#

Badanie technologii LINQ

namespace HostedReceiver { public class Receiver: IConfigureThisEndpoint, AsA_Server {

Oracle PL/SQL. Paweł Rajba.

METODY REPREZENTACJI INFORMACJI

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Symfonia Produkcja. Kreator raportów. Wersja 2013

Aplikacje WWW - laboratorium

Ćwiczenie 1. Przygotowanie środowiska JAVA

Kostki OLAP i język MDX

Visual Studio instalacja

Ćwiczenie dotyczące platformy Java EE zostało przygotowane z myślą o środowisku NetBeans w wersji 7.3 (do pobrania z

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Rozdział 17. Zarządzanie współbieżnością zadania

Instalacja NOD32 Remote Administrator

Aplikacje RMI Lab4

7. Formularze master-detail

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

1.Wstęp. 2.Generowanie systemu w EDK

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Ekspert radzi. mechanizm w enova, umożliwiający wskazanie domyślnej drukarki dla danego stanowiska i wydruku. Strona 1 z 8. Ekspert radzi.

Laboratorium 1 - Programowanie proceduralne i obiektowe

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Programowanie obiektowe

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p.

2. Podstawy narzędzia Application Builder, budowa strony, kreatory aplikacji

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Programowanie telefonów z Windows Phone 7, cz. 4

Ćwiczenie 3 funkcje agregujące

Dostęp do baz danych w ASP.NET.

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Programowanie w Javie

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Programowanie Komputerów 2FD. Materiały pomocnicze do laboratorium

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

Programowanie zespołowe

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Zastępstwa Optivum. Jak przenieść dane na nowy komputer?

Transkrypt:

LINQ TO XML Celem ćwiczenia jest zapoznanie się z możliwościami przetwarzania dokumentów XML na platformie.net. W toku zadania zostaną przedstawione dwie technologie: LINQ TO XML i XPath. Autor ćwiczenia: Marcin Wolicki 1. Pobierz pliki XML zawierające dane pracowników i zespołów: a. http://www.cs.put.poznan.pl/kjankiewicz/txml/xml-schema/prac.xml b. http://www.cs.put.poznan.pl/kjankiewicz/txml/xml-schema/zesp.xml Zapisz je na dysku i zapamiętaj ścieżkę do tych plików. 2. Otwórz VisualStudio 2010 i utwórz nowy projekt aplikacji konsolowej. W tym celu: a. Wybierz File > New > Project b. W oknie New Project zaznacz Console Application z Visual C# > Windows c. Wprowadź dowolną nazwę projektu (Name) - przykładowo WAI.XML d. Przykładowo wypełnione okno tworzenia nowego projektu:

Proste zapytania 3. Napisz funkcję zwracającą wszystkie ROW z pliku prac.xml. W tym celu: a. W klasie Program utwórz stałą zawierającą ścieżkę do pliku prac.xml private const string PracFile = @"c:/tmp/prac.xml"; b. Stwórz funkcję static void SimpleQuery i uzupełnij ją następującym kodem: var doc = XDocument.Load(PracFile); var aw = XNamespace.Get("www.pp.pl/prac"); var result = from d in doc.descendants(aw+"row") select d; foreach (var xelement in result) Console.WriteLine(xElement); i. Funkcja XDocument.Load wczytuje plik XML do pamięci i tworzy instancję klasy XDocument ii. XNamespace.Get jest wykorzystana w celu pobrania tych elementów dokumentu XML, które są kwalifikowane przez namespace www.pp.pl/prac c. Dodaj brakujący using: using System.Xml.Linq; d. Dodaj wywołanie funkcji SimpleQuery do Main: static void Main(string[] args) SimpleQuery(); Console.ReadLine(); e. Uruchom program za pomocą Debug > Start Debugging (F5) f. Wynik działającego programu:

g. Przykładowy kod całości rozwiązania: 4. Utwórz funkcję wyświetlającą na konsoli nazwiska osób zatrudnionych na etacie PROFESOR. W tym celu: a. Skopiuj funkcję SimpleQuery i zmień jej nazwę na SimpleQuery_Nazwisko b. Zmień zawartość zapytania LINQ na następującą: var result = from d in doc.descendants(aw + "ROW") where d.element(aw + "ETAT").Value == "PROFESOR" select d.element(aw + "NAZWISKO").Value; i. W porównaniu do poprzedniego zapytania doszła klauzula where umożliwiająca ograniczenie zbioru wynikowego. c. Dostosuj funkcję Main, tak by zamiast SimpleQuery uruchamiała SimpleQuery_Nazwisko d. Uruchom aplikację (Debug > Start lub F5)

e. Przykładowy wynik działania programu: f. Przykładowy kod całości rozwiązania: 5. Utwórz funkcję o analogicznej funkcjonalności jak powyżej ale z wykorzystaniem XPath. W tym celu: a. Stwórz nową funkcję SimpleXPath_Nazwisko. b. Uzupełnij ją następującym kodem: var doc = new XmlDocument(); doc.load(pracfile); var xmlns = new XmlNamespaceManager(doc.NameTable); xmlns.addnamespace("p", "www.pp.pl/prac"); var result = doc.selectnodes("//../p:nazwisko/text()", xmlns); if(result!=null) foreach (var element in result) Console.WriteLine(((XmlText) element).value);

c. Dodaj brakujący using: using System.Xml; d. Dokończ zapytanie XPath, tak by zwracało nazwiska tylko tych osób, które są zatrudnione na etacie profesor (przykładowe rozwiązanie znajduje się na końcu zadania) e. Analogicznie jak poprzednio dostosuj funkcję Main i uruchom projekt. f. Przykładowy wynik działania programu: g. Przykładowy kod całości rozwiązania:

6. Utwórz funkcję zwracającą element PROFESOR wraz z ID oraz nazwiskiem. ID dodatkowo niech będzie kwalifikowane przez namespace www.pp.pl/prac. a. Skopiuj metodę SimpleQuery i zmień jej nazwę na SimpleQuery_Nazwisko2 b. Tym razem wykorzystamy inną składnię LINQ. Dotychczas korzystaliśmy ze składni przypominającej język SQL. Tym razem wykorzystamy składnię opartą na metodach. Zamień zapytanie na następujące: var result = doc.descendants(aw + "ROW").Where(d => d.element(aw + "ETAT").Value == "PROFESOR").Select(d => new XElement("PROFESOR", new XAttribute(aw + "ID", d.element(aw + "ID_PRAC").Value), new XElement("NAZWISKO", d.element(aw + "NAZWISKO").Value) )); i. Klauzula where została zastąpiona metodą Where(), a select metodą Select(). ii. Obie składnie LINQ są równoważne. c. Przyjrzyj się w jaki sposób tworzone są nowe elementy i atrybuty. d. Przykładowy wynik działania programu: e. Przykładowy kod:

Łączenie dokumentów (Join) 7. W kolejnym ćwiczeniu napisz funkcję zwracającą element PRACOWNIK (składający się z nazwy zespołu i nazwiska pracownika). a. W celu wykonania polecenia, będziemy musieli połączyć dwa pliki zesp.xml oraz prac.xml. b. Analogicznie jak w pkt. 3 utwórz stałą przechowującą ścieżkę do pliku zesp.xml: private const string ZespFile = @"c:/tmp/zesp.xml"; c. Utwórz funkcję SimpleQuery_Join, która będzie łączyła dwa pliki: private static void SimpleQuery_Join() var doc = XDocument.Load(PracFile); var nsprac = XNamespace.Get("www.pp.pl/prac"); var nszesp = XNamespace.Get("www.pp.pl/zesp"); var result = from prac in doc.descendants(nsprac + "ROW") join zesp in XDocument.Load(ZespFile).Descendants(nsZesp + "ROW") on prac.element(nsprac + "ID_ZESP").Value equals zesp.element(nszesp + "ID_ZESP").Value select new XElement("PRACOWNIK", new XElement("ZESPOL", zesp.element(nszesp + "NAZWA").Value), new XElement("NAZWISKO", prac.element(nsprac + "NAZWISKO").Value) ); foreach (var xelement in result) Console.WriteLine(xElement); i. W tym zapytaniu doszła klauzula join. Służy ona do łączenia wielu kolekcji w tym przypadku zesp.xml i prac.xml. Zwróć uwagę jak został zdefiniowany warunek połączeniowy. d. Zmodyfikuj odpowiednio funkcję Main i uruchom program.

e. Przykładowy wynik działania programu: Agregacja 8. Przedostatnie zadanie polega na przygotowaniu funkcji obliczającej sumę płacy podstawowej dla wszystkich pracowników. a. W tym celu skopiuj funkcję SimpleQuery i zmień jej nazwę na SimpleQuery_Aggregation b. Zastąp zapytanie LINQ następującym: var result = from prac in doc.descendants(nsprac + "ROW") group prac by prac.element(nsprac + "ID_ZESP").Value into grp select new sumplacapod = grp.sum(p => Decimal.Parse(p.Element(nsPrac + "PLACA_POD").Value)), avgplacapod = grp.average(p => Decimal.Parse(p.Element(nsPrac + "PLACA_POD").Value)), idzesp = grp.key ; c. Zmodyfikuj odpowiednio funkcję Main. Uruchom program. d. Przykładowy wynik działania programu:

e. Przykładowy kod: 9. Zmodyfikuj powyższą funkcję, tak by w postaci XML-a zwracała sumę płacy podstawowej i jej średnią pogrupowaną według zespołów wraz z nazwą zespołu. a. Przykładowy wynik działania programu: b. Przykładowe rozwiązanie: