1 / 26

Haladó Programozás

Haladó Programozás. XML XDocument LINQ to XML. Haladó Programozás. XML (w3schools.com) XDocument LINQ to XML. XML. <?xml version="1.0"?> < note > < to > Tove </ to > < from > Jani </ from > < heading > Reminder </ heading > < body > Don't forget me this weekend! </ body >

freira
Télécharger la présentation

Haladó Programozás

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Haladó Programozás XML XDocument LINQ to XML Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  2. Haladó Programozás XML (w3schools.com) XDocument LINQ to XML Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  3. XML <?xml version="1.0"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> • Olyan, mint a HTML? Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  4. HTML vs XML • HTML: „tag”-ek sorozata: <html> , <head>, <body> … Mindegyik speciális jelentéssel bír, előre definiáltak (HTML szabvány) • HTML: laza szabályok, nem kell tökéletesnek lenni egy dokumentumnak (lezárás, kis- és nagybetűk, egymásba ágyazás) • HTML: Eredetileg adat és megjelenítés definiálására lett kitalálva (bár HTML+CSS elv szerint az a jó, ha csak adatot definiál) • XML: saját tagek használhatóak, a tárolni kívánt adat egyediségének megfelelően • XML: SZIGORÚ szabályok, a dokumentumnak helyesnek KELL lennie (ha nem az, a parsernek csak azt kell jeleznie, hogy „error”) • XML: Adatok definiálására való, nem ír le semmilyen folyamatot • XHTML: a kettő keveréke  HTML tagek, XML szigorúságával Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  5. XML felhasználása • Tetszőleges adat szöveges leírása, és így továbbításra alkalmas forma felépítése • Programozási nyelvtől független adatleírás és -továbbítás • Platformfüggetlen adattovábbítás • Számos internetes „nyelv” leíró eszköze: • XHTML • WSDL • WML (WAP) • RSS • Konfigurációs állományok, pl. a Visual Studioban mindenhol Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  6. XML struktúra <?xml version="1.0"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> • Első sor: kötelező formátum specifikáció • Kiegészíthető karakterkódolással:<?xml version="1.0" encoding="ISO-8859-1"?><?xml version="1.0" encoding="UTF-8"?>  ERŐSEN JAVASOLT! Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  7. XML struktúra • Kötelezően kell lennie egy gyökérelemnek, ami az egész dokumentumot közrefogja (ebben az esetben: a note elem) • Mindegyik elem alá lehet rendelni al-elemeket • Mindegyik elemnek lehet szöveges tartalma és attribútuma, amely az adott elemhez ad meg extra tulajdonságokat (metadata) • 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="valami" , mert ez alapján lehetséges az elemek azonosítása Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  8. XML szabályok • Minden tag lezárása kötelező (<tag></tag> vagy <tag />) • 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 • Az egymásba ágyazás lezárásainak megfelelő sorrendben kell lenniük: • Rosszul formázott: <a><b></a></b> • Jól formázott: <a><b></b></a> • Speciális karakterek helyett entity-ket használunk: Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  9. XML 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 Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  10. XML – Összefoglalás <?xml version="1.0" encoding="ISO-8859-1"?> <note date="2010.04.14"> <from>Joe</from> <to>Bill</to> <heading>Hibajelentés</heading> <body>Elszúrtad!</body> </note> Dokumentum-deklaráció Gyökérelem Elem Záróelem Attribútum Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  11. Haladó Programozás XML XDocument LINQ to XML Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  12. 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 Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  13. 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 Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  14. XElement • A konstruktor flexibilis (params kulcsszó)  szinte bármilyen XML létrehozható akár egyetlen konstruktorhívással • var xe = newXElement("ember", "Joe"); <ember>Joe</ember> • var xe2 = newXElement("ember",newXElement("név", "Joe"), newXElement("kor", 25)); <ember> <név>Joe</név> <kor>25</kor> </ember> Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  15. XAttribute • Konstruktorral:var xe = newXElement("ember", newXAttribute("id", 43984), newXElement("név", "Joe"), newXElement("kor", 25)); • Utólag:var xe2 = newXElement("ember", newXElement("név", "Joe"), newXElement("kor", 25)); xe2.SetAttributeValue("id", 43984); <ember id="43984"> <név>Joe</név> <kor>25</kor> </ember> Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  16. XDocument mentése XDocument outDoc = newXDocument( newXElement("nép", newXElement("ember", newXAttribute("id", 0), newXElement("név", "Joe"), newXElement("kor", 22)), newXElement("ember", newXAttribute("id", 1), newXElement("név", "Quagmire"), newXElement("kor", 34)))); outDoc.Save("people.xml"); • Egyénre szabható: outDoc.WriteTo(…) + XmlWriter Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  17. XDocument betöltése • XDocument inDoc = XDocument.Load("Joe.xml"); • XDocument XDoc = XDocument.Load ("http://nik.uni-obuda.hu/workers.php"); <worker id="[person_id]"> <name>[person_name]</name> <dept>[person_dept]</dept> <room>[person_room]</room> <phone>[person_phone]</phone> <mail>[person_mail]</mail> <web>[person_web_hu]</web> <number>[random]</number> </worker> Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  18. Haladó Programozás XML XDocument LINQ to XML Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  19. LINQ ismétlés – Használható operátorok • Rendezés: OrderBy – tetszőleges sorrend, Reverse – sorrend megfordítása • 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 • 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 Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  20. LINQ ismétlés – Használat • Lambda kifejezések, var típus, objektum inicializáló, névtelen típusok • int num = jelzesek.Where(x => x.Jelleg == jelleg_tipus.Viharos).Select(x => x.Regio).Distinct().Count(); • var grp = from x in jelzesek group x by x.Regio into g selectnew { Regio = g.Key, Atlag = g.Average(y => (y.Min + y.Max) / 2) }; Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  21. LINQ to XML • Valamivel lassabb, mint az XmlReader • String adatokkal dolgozunk – mindig konvertálni kell a valódi típusra (typecasting)! XDocument XDoc = XDocument.Load("http://nik.uni-obuda.hu/workers.php"); var q = from x in XDoc.Root.Descendants("worker")select x; foreach (var akt in q) { Console.WriteLine(akt.ToString()); } Console.ReadLine(); Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  22. LINQ to XML XDocument XDoc = XDocument.Load("http://nik.uni-obuda.hu/workers.php"); var q = from x in XDoc.Root.Descendants("worker") where ((int)x.Element("number") > 150) && ((int)x.Attribute("id") % 2 ==1) selectnew { id=(int)x.Attribute("id"), name=(string)x.Element("name"), number=(int)x.Element("number") }; foreach (var akt in q) { Console.WriteLine(akt.ToString()); } Console.ReadLine(); Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  23. Feladatok • Implementáljuk a prezentációban látható funkciókat: összes rekord; páratlan ID-jű és 150-nél nagyobb számmal rendelkezők • Szakcsoportonként tudni szeretnénk a dolgozók darabszámát. A listát rendezzük szakcsoport szerinti sorrendbe! • Határozzuk meg szintenként a dolgozók darabszámát és az átlagos számértéküket! • Határozzuk meg a legnagyobb intézetet! • Listázzuk ki a leghosszabb e-mail címmel rendelkező dolgozóval egy intézetben dolgozókat! Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  24. Források • Fülöp Dávid XLinq prezentációja • www.windowsclient.net • Marco Russo, Paolo Pialorsi: Programming Microsoft LINQ • 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) Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  25. Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

  26. Szabó Zsolt & Fülöp Dávid, Óbudai Egyetem, 2011 szabo.zsolt@nik.uni-obuda.hu

More Related