LINQ módszerek XML kezelés, XLINQ Feladat

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Lekérdezések SQL-ben Relációs algebra A SELECT utasítás
Weblap szerkesztés HTML oldal felépítése Nyitó tag Záró tag Nyitó tag Záró tag oldalfej tözs.
C++ programozási nyelv Gyakorlat hét
Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
LINQ to DataSet Kereskényi Róbert
Extensible Markup Language
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Táblázat kezelő programok
SQL – DQL (Data Query Language ) adat lekérdezések
JavaScript.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Programozási alapismeretek 8. előadás. ELTE 2/  További programozási tételek További programozási tételek 
Bevezetés a Java programozásba
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Programozás II. 3. Gyakorlat C++ alapok.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Hernyák Zoltán XML validálás.
Adatbázis-kezelés ACCESS program:
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
Entity framework Krizsán Zoltán
V 1.0 Szabó Zsolt, Óbudai Egyetem, Haladó Programozás Eseménykezelés ismétlés Névtelen metódusok (anonymous methods)
OE-NIK HP Haladó Programozás WCF kivételkezelés. OE-NIK HP Haladó Programozás Windows Communication Foundation A szolgáltatás, a hoszt és az ügyfél elkészítése.
ADATBÁZISOK
ADATBÁZISOK
Érettségi feladatok megoldása LINQ-kel
Önleíró adatok: XML INFO ÉRA, Békéscsaba
XML támogatás adatbázis-kezelő rendszerekben
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
P ROGRAMOZÁS I/O műveletek. S YSTEM.C ONSOLE A programjainknak fontos része a felhasználóval való kommunikáció. Adatokat kell kérni tőle, vagy közölnünk.
SQL.
Az SQL nyelv alapjai.
V 1.0 OE-NIK HP 1 Programozási Paradigmák és Technikák Eseménykezelés Névtelen metódusok (anonymous methods)
Lambda kifejezések LINQ
szakmérnök hallgatók számára
Access XP Kifejezés-szerkesztő Összehasonlító operátorok:
Összetett adattípusok
Összetett adattípusok a Pascal nyelvben
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
XML fejlesztések TSQL fejlesztések Tábla paraméter SQLCLR fejlesztések 8k limit feloldása Több paraméteres UDA-ek Ordered UDF-ek Entity Framework ADO.NET.
– SQL 3: SELECT - 1. – Tarcsi Ádám, január 31. Adatbázis gyakorlat.
– SELECT - 2. – Tarcsi Ádám március Adatbázis gyakorlat.
Objektum orientált programozás
Virtuális Méréstechnika Sub-VI és grafikonok 1 Makan Gergely, Vadai Gergely v
Mérés és adatgyűjtés laboratóriumi gyakorlat - levelező Sub-VI és grafikonok 1 Mingesz Róbert V
Programozás I. Matematikai lehetőségek Műveletek tömbökkel
V 1.0 ÓE-NIK-AII, Programozás I. Karaktersorozatok Feladatok.
Webprogramozó tanfolyam
A Visual Basic nyelvi elemei
Adatbázis-kezelés 3-4. Adatok lekérdezése utasítás általános formája SELECT [ALL/DISTINCT] {*/, …, } FROM [ ], …, [ ] [WHERE GROUP BY, …, HAVING ORDER.
V 1.0 OE-NIK HP 1 Haladó Programozás LINQ bevezetés, LINQ to Objects XML kezelés, LINQ to XML Feladat.
Illés Zoltán ELTE Informatikai Kar
– SELECT - 1. – Tarcsi Ádám január Adatbázis gyakorlat.
Haladó Programozás Adatbázis-elérési módszerek összehasonlítása
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
Haladó Programozás Delegáltak, események OE-NIK HP 1.
Informatikai gyakorlatok 11. évfolyam
Eseménykezelés ismétlés Névtelen metódusok (anonymous methods)
LINQ bevezetés, LINQ to Objects XML kezelés, LINQ to XML Feladat
Lambda kifejezések LINQ
XML XDocument LINQ to XML
LINQ to Xml Xml kezelése Linq-val Zaklóczki Dávid
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Web programming and advanced development techniques
Web programozás és haladó fejlesztési technikák – C#
Előadás másolata:

LINQ módszerek XML kezelés, XLINQ Feladat Haladó Programozás LINQ módszerek XML kezelés, XLINQ Feladat OE-NIK HP 1

LINQ módszerek XML kezelés, XLINQ Feladat Haladó Programozás LINQ módszerek XML kezelés, XLINQ Feladat OE-NIK HP 2

Lambda kifejezések Új operátor: => (Lambda operátor) , a bemenet és a kimenet összekötésére használt Szintaxis: (paraméter[ek]) => kimenetet meghatározó kifejezés Lambda kifejezés használata: 1) delegate deklarálása: típusok fixálása delegate int del(int i); 2) delegate-hez változó hozzárendelése és lambda operátor del negyzet = (x) => x * x; 3) Eljárás meghívása int j = negyzet(5); //j = 25 ISMÉTLÉS OE-NIK HP

LINQ = Language Integrated Queries Gyűjtemények szintaktikailag egyszerű és forrásfüggetlen kezelése Szintaktikailag egyszerű: ciklusok és elágazások halmaza helyett lekérdező operátorokat használunk Forrásfüggetlen (MVC elv): teljesen mindegy, hogy a gyűjtemény adatforrása tömb, lista, XML, adatbázis – az eljárások ugyanazok Megjelenítés réteg (PROG3) Üzleti logika réteg (PROG1, PROG2) Adat (erőforrás) réteg (ADB) A kép a PPT gyakorlatból származik © Szénási Sándor :) Az MVC elvről lehet mesélni egy kicsit OE-NIK HP

LINQ to … ? LINQ To Objects: Memóriában lévő gyűjtemények, listák, tömbök feldolgozását teszi lehetővé (lényegében minden olyan osztállyal működik amely megvalósítja az IEnumerable<T> interfészt). LINQ To XML: XML dokumentumok lekérdezését és szerkesztését teszi lehetővé. LINQ To SQL (DLINQ) és LINQ To Entities (Entity Framework, VS2008SP1): relációs adatbázisokon végezhetünk műveleteket (eredetileg csak MS SQL-Server, de vannak kiterjesztések más szerverekhez is) Elmondani: DLINQ nem használatos OE-NIK HP

Lambda kifejezések LINQ metódusokkal A paraméter részbe kerülhetnek lambda kifejezések Minden LINQ metódus IEnumerable<T> típushoz tartozó „extension method” A metódusok paramétere egy T bemeneti típusú lambda kifejezés, amelynek a kimeneti típusa metódusonként más (pl. Whereszűrésbool kimenet; OrderBysorrendezésIComparable kimenet) A lambda kifejezés minden gyűjtemény-elemre meghívódik A kimeneti típusa tipikusan IEnumerable<T> (néha: T, int) Adatbázisok esetén azonos szintaxis, IQueryable<T> extension methods expression lambda  nem feltétlenül hívódik meg minden elemre optimalizálható OE-NIK HP

Nyelvi elemek Lambda kifejezések: a programkód rövidítése miatt, hogy ne kelljen minden különféle szűréshez / sorrendezéshez / összegszámoláshoz külön delegate-et és metódust írni var típus (C#3-tól): egy metódusban deklarált változó típusának meghatározását a fordítóra bízzuk. Fontos lehet, ha annyira dinamikus az osztály, hogy fogalmunk sincs egy változó tényleges típusáról Kötelező egyből értéket rendelni a var típusú változóhoz, innentől az úgy fog viselkedni, mint az ekvivalens típus var x = 6; var z = new Hallgato(); OE-NIK HP

Nyelvi elemek Objektum inicializáló: ha van egy osztálynak nulla paraméteres konstruktora: Diak bela = new Diak() { Kreditek = 23, Nev = "Béla" }; Névtelen osztályok (ideiglenes, apró, csak adatot összefogó osztályok helyett ) : var NévKorCím = new { Nev="Béla", Kor=23, Cim="Budapest Bécsi út 96/B" }; A diák osztálynak most nincs nulla paraméteres konstruktora, a fenti sor csak akkor működik, ha van! OE-NIK HP

LINQ Gyűjtemények class Diak { public string Nev { get; set; } public int Kreditek { get; set; } public Diak(string ujnev, int ujkreditek) { Nev = ujnev; Kreditek = ujkreditek; } public override string ToString() return Nev + " - " + Kreditek; Ezt a példa-osztályt fogjuk használni a példákban OE-NIK HP

LINQ Gyűjtemények int[] elso = new int[] { 2, 4, 6, 8, 2, 1, 2, 3 }; int[] masodik = new int[] { 1, 3, 5, 7, 1, 1, 2, 3 }; string[] strtomb = new string[] { "Béla", "Jolán", "Bill", "Shakespeare", "Verne", "Jókai" }; List<Diak> diakok = new List<Diak>(); diakok.Add(new Diak("Első Egon", 52)); diakok.Add(new Diak("Második Miksa", 97)); diakok.Add(new Diak("Harmadik Huba", 10)); diakok.Add(new Diak("Negyedik Néró", 89)); diakok.Add(new Diak("Ötödik Ödön", 69)); Ezeket a gyűjteményeket fogjuk használni a példákban OE-NIK HP

Használható operátorok Halmaz-kezelés: Concat – egymás után másolás, Contains – elem meglétének vizsgálata, Distinct – ismétlések szűrése, Intersect – halmazelméleti metszet, Union – halmazelméleti únió, Except – Halmazelméleti különbség Rendezés: OrderBy – tetszőleges sorrend, Reverse – sorrend megfordítása Szűrés: Where „Számolás” („Aggregate methods”, aggregáló eljárások): Average – átlag, Count – darabszám, Max – Maximum, Min – Minimum, Sum – Összeg Csoportosítás: GroupBy – valamilyen közös tulajdonság szerint lehet csoportosítani a tagokat Mi ezeket egyszerű tömbökön / listákon fogjuk használni Elmondani: csoportosítás működése: valami alapján csoportok képzése + csoportokon ugyanaz a művelet végrehajtása, gyakorlatilag where a csoportképző mező minden egyes értékére, és utána számolás OE-NIK HP

LINQ Operátorok 1. – Megfordítás Tegyük fel, hogy a gyűjtemény alaptípusa int[], és egyszerűen szűrünk/ megfordítunk  tudjuk, hogy a kimenet is int[] lesz Kimeneti típusnak EKKOR SEM HASZNÁLHATÓ int[], mert a meghívandó eljárás általánosan van megírva, ugyanaz az eljárás hívódik meg minden típusú gyűjteményre  Mindig IEnumerable<valami> vagy sima var típust használunk  Konvertálható: eredmeny.ToArray(); eredmeny.ToList(); var uj = elso.Reverse(); foreach (var akt in uj) { Console.Write(akt + ", "); } Console.ReadLine(); 3, 2, 1, 2, 8, 6, 4, 2 Elmondani: IEnumerable<valami> , vagyis a LINQ operátorok kimenetéről általánosságban CSAK annyit tudunk, hogy foreach ciklussal bejárható, a feldolgozást is így végezzük. A foreach ciklus mindig ugyanilyen, a diákon ezentúl a foreach kimenete van csak feltüntetve OE-NIK HP

LINQ Operátorok 2. – Halmazok Elem létezésének vizsgálata: bool bennevan=elso.Contains(4); Két gyűjtemény egymás után fűzése (NEM halmazok!): var uj = elso.Concat(masodik); Ismétlődések kivágása (halmazzá alakítás): var uj = elso.Distinct(); Halmazelméleti metszet: var uj = elso.Intersect(masodik); Halmazelméleti únió: var uj = elso.Union(masodik); Halmazelméleti különbség var uj = elso.Except(masodik); Elmondani: * Concat() esetén nincsenek kivágva az ismétlődések, csak sima egymás után másolás * halmazelméleti kifejezésnél automatikusan kivágja az ismétlődéseket OE-NIK HP

LINQ Operátorok 3. – Sorrendezés OrderBy Paraméterül egy olyan eljárást vár, amely egy osztályból kiszedi a kulcsot (azt a mezőt, ami alapján rendezni fog) (Ehelyett egy lambda kifejezést szokás írni) Második paraméterként megadható neki egy saját, IComparer interfészt implementáló osztály, ami az összehasonlítást végzi Int tömb, rendezés az elemek alapján: var uj = elso.OrderBy(x => x); String tömb, rendezés az elemek hossza alapján: var uj = strtomb.OrderBy(x => x.Length); Diákok listája, névsorba rendezés : var uj = diakok.OrderBy(x => x.Nev); Második paraméter: nem fogjuk használni Elmondani: x=>x , Lambda kifejezés: bemenet=kimenet … Az „x” változóval fogjuk jelezni ezentúl az „atuális elem”-et Elmondani: a fordító meg az intellisense is ugyanúgy működik: érzékelik, hogy milyen gyűjteménynek hívom meg a metódusát. string[] esetén x=>x.Length jó, de x=>x.nev nem, ez utóbbi csak diak[] vagy List<diak> esetén jó OE-NIK HP

LINQ Operátorok 4. – Szűrés, darabszámolás Where / Count A paraméterül adott kifejezésnek bool típust kell visszaadni. A Where eredménye az a gyűjtemény, ahol ez true értéket ad vissza. A Count eredménye a darabszám (int!!) A count meghívható paraméter nélkül is  teljes darabszám Int tömb, a páratlanok: var uj = elso.Where(x => x % 2 == 1); String tömb, a négy betűs nevek: int num = strtomb.Count(x => x.Length == 4); Második paraméter: nem fogjuk használni Elmondani: x=>x , Lambda kifejezés: bemenet=kimenet Elmondani: a fordító meg az intellisense is ugyanúgy működik: érzékelik, hogy milyen gyűjteménynek hívom meg a metódusát. string[] esetén x=>x.Length jó, de x=>x.nev nem, ez utóbbi csak diak[] vagy List<diak> esetén jó OE-NIK HP

LINQ Operátorok 5. – Szűrés, részkiválasztás Diákok listája, csak név: var uj = diakok.Select(x => x.Nev); Diákok listája, ahol a kreditszám prím: var uj = diakok.Where(x => { if (x.Kreditek<=1) return false; for (int i = 2; i <= Math.Sqrt(x.Kreditek); i++) if (x.Kreditek % i == 0) return false; return true; }); // Második Miksa - 97, Negyedik Néró - 89 OE-NIK HP

LINQ Operátorok 6. – Több operátor Diákok listája, a páratlan kreditszámúak nagybetűs neve név szerinti fordított sorrendben: var uj = diakok.Where(x => x.Kreditek%2==1) .OrderBy(x => x.Nev) .Reverse() .Select(x => x.Nev.ToUpper()); // ÖTÖDIK ÖDÖN, NEGYEDIK NÉRÓ, MÁSODIK MIKSA Ugyanaz az eredmény, ugyanaz a köztes kód: var uj = from x in diakok where x.Kreditek % 2 == 1 orderby x.Nev descending select x.Nev.ToUpper(); Elmondani: NEM SQL! Azonos kulcsszavak, mert azonos feladatot látnak el, de más a sorrend, más a használat OE-NIK HP

LINQ Operátorok 7. – Aggregálás Aggregáló metódusok int ossz = elso.Sum(); //28 double atlag = masodik.Average(); //2.875 int parosOssz = elso. Where(x => x % 2 == 0).Sum(); //24 int paratlanOssz = elso. Where(x => x % 2 == 1).Sum(); //4 A fenti példa gyakori: valamilyen ismétlődés szerint akarom csoportosítani a gyűjteményemet, és az egyes csoportokra szeretném tudni a darabszámot/összeget Csoportonként egy where+aggregálás  zavaró  automata csoportosítás: GroupBy OE-NIK HP

LINQ Operátorok 8. – Csoportosítás Csoportosítás, paritás szerinti darabszámok: var csoport=elso.GroupBy(x => x % 2); foreach (var g in csoport) { Console.WriteLine("Maradék: " + g.Key + ", darabszám: " + g.Count()); } var uj=from x in elso group x by x%2 into g select new {Maradek=g.Key, Darab=g.Count()}; Mondani: Csoportosításnál jobb a select-es kiírás Az eljáráshalmozás helyett is jobb a select-es kiírás A lambda kifejezések halmozása helyett is jobb a select-es kiírás OE-NIK HP

LINQ módszerek XML kezelés, XLINQ Feladat Haladó Programozás LINQ módszerek XML kezelés, XLINQ Feladat OE-NIK HP 20

XML emlékeztető (w3schools.com) <?xml version="1.0"?> <bookstore> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </bookstore> XAML elmagyarázása előtt tudni kell, mi az az XML… Hierarchikus adatleíró formátum XML deklarációk + elemek + attribútumok Elemek: <bookstore></bookstore>, <book></book> = <tag></tag> Attribútumok: <book>-ban category=„…” …

XML emlékeztető Felépítését szigorú szabályok korlátozzák Első sor: opcionális formátumspecifikáció, kiegészíthető karakterkódolással: <?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="UTF-8"?> Mindegyik elemnek lehet: Szöveges tartalma Alelemei Attribútumai, amelyek az adott elemhez adnak meg tulajdonságokat Kötelezően kell lennie egy gyökérelemnek, ami az egész dokumentumot közrefogja (<bookstore> elem) Minden elem lezárása kötelező (<tag></tag> vagy <tag />) Az egymásba ágyazás lezárásainak megfelelő sorrendben kell történniük Rosszul formázott: <a><b></a></b> Jól formázott: <a><b></b></a> Ezt igazából nem most akarjuk leadni.

XML emlékeztető – attribútum vs. alelem Bár szabály nincs rá, de a józan ész elvei szerint kell használni az attribútumokat és a gyerekelemeket. Ez a megoldás szintaktikailag helyes lenne, de nem ésszerű: <note day="10" month="01" year="2008" to="Tove" from="Jani" heading="Reminder" body="Don't forget me this weekend!"> </note> Javaslat: attribútum csak kivételes esetben, legtöbbször csak az id=„0001", ami alapján az elemek azonosíthatók Miért? Mert az attribútum nem bővíthető (további alinfókkal), az alelem viszont igen.

XML emlékeztető – szabályok A kis- és nagybetűk különbözőek Az attribútumok jelzésénél kötelező az idézőjel vagy az aposztróf Speciális karakterek helyett entity-ket használunk: Karakter Entity < > & & ‘ &apos; " " OE-NIK HP

XML emlékeztető – szabályok <!-- megjegyzés --> A szöveges tartalmakban a szóköz karakterek megmaradnak Sorvégjel: linux/unix szerű \n (\r nem kell, de a legtöbbször nem gond) Tag-névben lehet szám és betű is, de többnyire csak az angol ABC betűit használjuk Lehetőleg legyen rövid Space nem használható, inkább _ Pont, kötőjel, kettőspont nem javasolt, inkább _ Szám nem lehet a név elején DTD/Schema készíthető: „well formed” vs „valid” Az XML kiegészíthető: új tag bevezetése nem teszi tönkre az eddig használt feldolgozó programokat DTD: saját formátuma van. Leírja, hogy milyen tag-ek léteznek, melyik milyen tag-be ágyazható, és melyiknek milyen attribútuma engedélyezett. Schema: XML elveket követő leírási formátum, ugyanazok az információk vannak benne, mint a DTD-ben „well formed” = jó xml, nincs benne szintaktikai hiba „valid” = a DTD-hez illeszkedő OE-NIK HP

XML + .NET XmlReader, XmlWriter Gyorsak, kevés memóriát fogyasztanak Csak előrefelé tudnak dolgozni Bonyolult az összetett xml-ek megírása Az xml-transzformáció borzasztó tud lenni (node csere, node változtatás, etc) XmlDocument, XmlNode, XmlElement, Xml* Lassú, sokat fogyaszt (a memóriában felépíti a teljes dokumentum fáját) Ezzel sem feltétlenül egyszerűek az algoritmusok Előnyös, ha transzformálni akarunk OE-NIK HP

X* osztályok Cél: Gyors Letisztult XML eszközök támogatása (XQuery, XSLT) XPath helyettesítése XDocument, XElement, XAttribute, XDeclaration, X* Átláthatóbban írhatunk XML-t C#-ban (és más .NET-nyelveken) System.Xml.Linq névtér Automatikusan stringgé alakulnak (tagekkel együtt!) A tényleges tartalom (Value) feldolgozásához kasztolni kell OE-NIK HP

XElement A konstruktor flexibilis (params kulcsszó)  szinte bármilyen XML létrehozható akár egyetlen konstruktorhívással var xe = new XElement("ember", "Joe"); <ember>Joe</ember> var xe2 = new XElement("ember", new XElement("név", "Joe"), new XElement("kor", 25)); <ember> <név>Joe</név> <kor>25</kor> </ember> Params  el kell magyarázni OE-NIK HP

XAttribute Konstruktorral: var xe = new XElement("ember", new XAttribute("id", 43984), new XElement("név", "Joe"), new XElement("kor", 25)); Utólag: var xe2 = new XElement("ember", xe2.SetAttributeValue("id", 43984); <ember id="43984"> <név>Joe</név> <kor>25</kor> </ember> OE-NIK HP

XDocument mentése XDocument outDoc = new XDocument( new XElement("nép", new XElement("ember", new XAttribute("id", 0), new XElement("név", "Joe"), new XElement("kor", 22)), new XAttribute("id", 1), new XElement("név", "Quagmire"), new XElement("kor", 34)))); outDoc.Save("people.xml"); Egyénre szabható: outDoc.WriteTo(…) + XmlWriter OE-NIK HP

Egyszerű adatfeldolgozás <emberek> <ember id="43984"> <név>Joe</név> <kor>25</kor> <telefon>0618515133</telefon> <ember> … </emberek> .Element(name) .Attribute(name) .Elements(name) .Attributes(name) string nev = xDoc.Element("emberek").Element("ember") .Element("név").Value; int id = int.Parse(xDoc.Element("emberek").Element("ember") .Attribute("id").Value); ... VAGY ... (nem csak attribútum, hanem elem esetén is) int id = (int)(xDoc.Element("emberek").Element("ember") .Attribute("id")); OE-NIK HP

LINQ to XML X* osztályok: igen erős LINQ-támogatás! LINQ-zható IEnumerable<T>-ként kapunk vissza egy csomó adatot Pl. XElement xe2: xe2.Descendants() minden gyerekelem (gyerekelemek gyerekelemei is) xe2.Descendants("note") ilyen nevű gyerekelemek (gyerekelemek gyerekei is) xe2.Elements() közvetlen gyerekelemek xe2.Elements("note") ilyen nevű közvetlen gyerekelemek xe2.Attributes(), xe2.Ancestors() … Descendants()  paraméterezés nélkül minden gyermekelemen (a gyermekelem gyermekelemein is!) végigmegy OE-NIK HP

LINQ to XML <emberek> <ember id="43984"> <név>Joe</név> <kor>25</kor> <telefon>0618515133</telefon> <ember> … </emberek> XDocument XDoc = ... var q = from x in XDoc.Root.Descendants("ember") where x.Element("név").Value.StartsWith("Jo") select x; OE-NIK HP

LINQ módszerek XML kezelés, XLINQ Feladat Haladó Programozás LINQ módszerek XML kezelés, XLINQ Feladat OE-NIK HP 34

XDocument betöltése XDocument inDoc = XDocument.Parse(stringWithFullXML); XDocument inDoc = XDocument.Load("Joe.xml"); XDocument XDoc = XDocument.Load ("http://users.nik.uni-obuda.hu/hp/people.xml"); <person> <name>Dr. Vámossy Zoltán</name> <email>vamossy.zoltan@nik.uni-obuda.hu</email> <dept>Alkalmazott Informatikai Intézet</dept> <rank>egyetemi docens, mb. intézetigazgató-helyettes, TDK-felelős</rank> <phone>+36 (1) 666-5573</phone> <room>BA.3.12</room> </person> A „random” értéke pszeudo-random 0-255: a név bináris MD5-jének második byteja decimálisan OE-NIK HP

Példa Listázzuk azokat, akik nem a BA épületben dolgoznak (String adatokkal dolgozunk – mindig konvertálni kell a valódi típusra, ha ez nem megfelelő (typecasting))! XDocument XDoc = XDocument.Load( "http://users.nik.uni-obuda.hu/hp/people.xml"); var q0 = from akt in XDoc.Descendants("person") let room=akt.Element("room").Value where !room.StartsWith("BA") select akt; foreach (var akt in q0) { Console.WriteLine(akt.ToString()); } OE-NIK HP

Feladatok Az XElement osztály az .Element() és az .Attribute() metódusaival olvasható... Ezek segítségével importáljuk az XML-t egy listába! Határozzuk meg az AII intézetben dolgozók darabszámát! Az AII dolgozóit listázzuk „lapozva”, 15 elemenként kelljen ENTER-t leütni Jelenítsük meg azokat, akiknek a harmadik emeleten van irodája! Kiknek van a leghosszabb vagy legrövidebb nevük? Határozzuk meg intézetenként a dolgozók darabszámát! Határozzuk meg a legnagyobb intézetet! Listázzuk a legnagyobb intézet dolgozóit! Listázzuk a harmadik legnagyobb intézet dolgozóit szobaszám szerint csökkenő sorrendben! OE-NIK HP

Források Lambda expressions: http://msdn.microsoft.com/en-us/library/bb397687.aspx Lambda expressions: http://geekswithblogs.net/michelotti/archive/2007/08/15/114702.aspx Why use Lambda expressions: http://stackoverflow.com/questions/167343/c-lambda-expression-why-should-i-use-this Recursive lambda expressions: http://blogs.msdn.com/b/madst/archive/2007/05/11/recursive-lambda-expressions.aspx Standard query operators: http://msdn.microsoft.com/en-us/library/bb738551.aspx Linq introduction: http://msdn.microsoft.com/library/bb308959.aspx 101 Linq samples: http://msdn.microsoft.com/en-us/vcsharp/aa336746 Lambda: Reiter István: C# jegyzet (http://devportal.hu/content/CSharpjegyzet.aspx) , 186-187. oldal Linq: Reiter István: C# jegyzet (http://devportal.hu/content/CSharpjegyzet.aspx) , 250-269. oldal Fülöp Dávid XLinq prezentációja Linq to XML in 5 minutes: http://www.hookedonlinq.com/LINQtoXML5MinuteOverview.ashx Access XML data using Linq: http://www.techrepublic.com/blog/programming-and-development/access-xml-data-using-linq-to-xml/594 Simple XML parsing examples: http://omegacoder.com/?p=254 , http://gnaresh.wordpress.com/2010/04/08/linq-using-xdocument/ XML: Reiter István: C# jegyzet (http://devportal.hu/content/CSharpjegyzet.aspx) , 224. oldal (A könyv az XMLReader/Writer, illetve az XmlDocument használatát mutatja be) OE-NIK HP

OE-NIK HP

OE-NIK HP