XML XDocument LINQ to XML

Slides:



Advertisements
Hasonló előadás
V 1.0 OE-NIK HP 1 Haladó Programozás LINQ bevezetés, LINQ to Objects XML kezelés, LINQ to XML Feladat.
Advertisements

LINQ módszerek XML kezelés, XLINQ Feladat
A felhasználói interfész A felhasználói interfész az a felület, amellyel a szoftver az ember felé „fordul”; amellyel a felhasználó nap mint nap találkozik.
ECM/DMS A GYAKORLATBAN E-SZÁMLA KIBOCSÁTÁS ÉS BEFOGADÁS E-SZÁMLA KIBOCSÁTÁS ÉS BEFOGADÁS
A korszerű könyvtár A gyors és célszerű keresés lehetőségei és technikája Vasas Lívia Semmelweis Egyetem Központi Könyvtár
Bevezetés a C# nyelvbe Az alapok összefoglalása Farkas Csaba.
Irattári és levéltári funkciók a tanúsított szoftverekben Vágujhelyi Ferenc.
A kifizetési kérelem összeállítása TÁMOP-3.2.9/B-08 Audiovizuális emlékgyűjtés.
ELTINGA és MTA KRTK KTI Horváth Áron április 7. Lakásárak, támogatások és energiahatékonyság.
Követelményelemzés – követelményspecifikáció A szoftverfejlesztés kapcsán az elemzés speciálisan egy kezdeti szakaszt jelöl, amelynek alapvető feladata.
CÉLCÉLCSOPORT  Egészségügyi szakmai tájékoztatás és betegtájékoztatás, az egészséges életvitelhez szükséges információk szolgáltatása, publikálása, áttekint-
A szaktanácsadás szolgáltatási terület dokumentációja Némethné Józsa Ágnes Intézményfejlesztési referens.
Forrás: Reiter István C_Sharp programozás lépésről lépésre (frissített tartalommal )
Gazdasági informatika - bevezető
Rendezésen alapuló kétmenetes algoritmusok
Nagyméretű állományok küldése
Tanulószerződés-kötés
A kérdőívek, a kérdőívszerkesztés szabályai
2. előadás Viszonyszámok
Adatbázis normalizálás
Logo Országos Számítástechnikai Tanulmányi Verseny
Programstruktúrák.
A víziközmű-szolgáltatásról szóló évi CCIX
Az Internet megismerése
AWK ismétlés AWK: adatvezérelt nyelv:
Adatbázisok gyakorlat
LINQ bevezetés, LINQ to Objects XML kezelés, LINQ to XML Feladat
Adatok importálása, rendezése és szűrése
Sz&p prof.
Moodle tesztkérdések létrehozása dr
T.R. Adatbázis-kezelés - Alapfogalmak Adatbázis:
A Hazug paradoxona Minden krétai hazudik. (Mondta egy krétai.)
Adatbázisok SQL.
Lexikális elemző: lex (flex)
Vállalati brosúra A cég általános célkitűzése
Animációk.
Kijelentéslogikai igazság (tautológia):
Nyelvek típusossága.
Adatbázis-kezelés (PL/SQL)
2. Bevezetés A programozásba
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Adatbevitel, értékadás, típuskonverzió
Közigazgatási alapvizsga a Probono rendszerben
Adatbázis alapfogalmak
Körmendi Dániel MAS Meeting Scheduler.
Algoritmusok és Adatszerkezetek I.
Számítógépes Hálózatok
RUGÓK.
Informatikai gyakorlatok 11. évfolyam
Web programozás és haladó fejlesztési technikák – C#
Informatikai gyakorlatok 11. évfolyam
iOT eszközök által rögzített adatok feldolgozása, megjelenítése
A villamos installáció problémái a tűzvédelem szempontjából
Új pályainformációs eszközök - filmek
Szabványok, normák, ami az ÉMI minősítési rendszerei mögött van
3. előadás.
Web programozás és haladó fejlesztési technikák XML
Összeállította: J. Balázs Katalin
SZAKKÉPZÉSI ÖNÉRTÉKELÉSI MODELL I. HELYZETFELMÉRŐ SZINT FOLYAMATA 8
Konzuli és Állampolgársági Főosztály, Schengeni Vízum Osztály
Műveletek, függvények és tulajdonságaik Mátrix struktúrák:
SQL jogosultság-kezelés
Dr. Vasas Lívia, PhD december
Mintaillesztés Knuth-Morris-Pratt (KMP) algoritmus
Tájékoztató az EPER pályázati folyamatáról
3. előadás.
Szöveges adatok tárolása
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Algoritmusok.
Hagyományos megjelenítés
Előadás másolata:

XML XDocument LINQ to XML Haladó Programozás XML XDocument LINQ to XML OE-NIK HP

XML (w3schools.com) XDocument LINQ to XML Haladó Programozás XML (w3schools.com) XDocument LINQ to XML OE-NIK HP

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? OE-NIK HP

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 OE-NIK HP

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 OE-NIK HP

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! OE-NIK HP

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 OE-NIK HP

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: Karakter Entity < > & & ‘ &apos; " " OE-NIK HP

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 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

Dokumentum-deklaráció 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 OE-NIK HP

XML XDocument LINQ to XML Haladó Programozás XML XDocument LINQ to XML 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

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> A „random” értéke pszeudo-random 0-255: a név bináris MD5-jének második byteja decimálisan OE-NIK HP

XML XDocument LINQ to XML Haladó Programozás XML XDocument LINQ to XML OE-NIK HP

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 OE-NIK HP

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 select new { Regio = g.Key, Atlag = g.Average(y => (y.Min + y.Max) / 2) }; OE-NIK HP

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(); Descendants()  paraméterezés nélkül minden gyermekelemen (a gyermekelem gyermekelemein is!) végigmegy OE-NIK HP

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) select new { 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(); Hívjuk fel a figyelmet a típuskonverziókra! X.Element() és X.Attribute() visszatérési értékét mindig konvertálni kell OE-NIK HP

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! OE-NIK HP

Források 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