Java XML kezelés labor

Hasonló dokumentumok
XML dokumentumok feldolgozása. DOM, SAX, StAX

Szoftvertechnolo gia gyakorlat

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

BME MOGI Gépészeti informatika 4.

Országos Területrendezési Terv térképi mel ékleteinek WMS szolgáltatással történő elérése, MapInfo program alkalmazásával Útmutató 2010.

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Országos Területrendezési Terv térképi mellékleteinek WMS szolgáltatással történő elérése, MapInfo program alkalmazásával

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Google Maps használata OSM, mint alternatív térkép

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

BME MOGI Gépészeti informatika 7.

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Access gyakorlati feladatok lépésről lépésre

3. Osztályok II. Programozás II

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Stateless Session Bean

Segédanyag: Java alkalmazások gyakorlat

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

A feladatok megoldásához felhasználandó osztályok leírásait az alábbi URL-en találja meg:

C#, OOP. Osztályok tervezése C#-ban

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Informatika terméktervezőknek

BME MOGI Gépészeti informatika 8.

Programozási nyelvek II.: JAVA

Az importálás folyamata Felhasználói dokumentáció verzió 2.1.

Duál Reklám weboldal Adminisztrátor kézikönyv

OOP: Java 8.Gy: Abstract osztályok, interfészek

QGIS Gyakorló. 1. kép. A vektor réteg (grassland.shp).

Java Programozás 1. Gy: Java alapok. Ismétlés ++

OOP: Java 8.Gy: Gyakorlás

Segédanyag: Java alkalmazások gyakorlat

Java Programozás 3. Gy: Java GUI. Swing, AWT

Python tanfolyam Python bevezető I. rész

OOP: Java 4.Gy: Java osztályok

A feladatok megoldásához felhasználandó annotációk leírásait az alábbi URL-en találja meg:

2009. évi adatszolgáltatás javítása

Java és web programozás

Programozási technológia

Programozási nyelvek Java

Vodafone-os beállítások Android operációs rendszer esetében

Entity Framework alapú adatbáziselérés

XML dokumentumok feldolgozása Java-ban XML, DTD, XSD, XSLT, JAXP, DOM, SAX, JDOM

Programozási nyelvek II. JAVA

Bevezetés a QGIS program használatába Összeálította dr. Siki Zoltán

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Szilipet programok telepítése Hálózatos (kliens/szerver) telepítés Windows 7 operációs rendszer alatt

Swing GUI készítése NetBeans IDE segítségével

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

OOP: Java 1.Gy: Java alapok

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

2009. évi adatszolg{ltat{s javít{sa

Eseményvezérelt és objektumorientált programozás

Szerver oldali Java programozás /II. 1. óra. Elemkönyvtárak. Elemkönyvtárak használata Saját elemkönyvtár készítése.

és az instanceof operátor

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

HASZNÁLATI ÚTMUTATÓ DOLGOZÓK IMPORTÁLÁSA KULCS BÉR PROGRAMBA AZ ONLINE MUNKAIDŐ NYILVÁNTARTÓ RENDSZERBŐL. Budapest, november 08.

Java programozási nyelv 5. rész Osztályok III.

Programozási nyelvek Java

8. Lekérdezés geometria alapján

XML adatkezelés. A DOM alapú adatkezelés. Dr. Kovács László Répási Tibor kiegészítéseivel

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Access adatbázis elérése OLE DB-n keresztül

10. gyakorlat Struktúrák, uniók, típusdefiníciók

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

3. Gyakorlat Ismerkedés a Java nyelvvel

DINAMIKUS MULTIMÉDIÁS TARTALOM...

QGIS gyakorló. --tulajdonságok--stílus fül--széthúzás a terjedelemre).

openbve járműkészítés Leírás az openbve-hez kapcsolódó extensions.cfg fájl elkészítéséhez

BME MOGI Gépészeti informatika 6.

BME MOGI Gépészeti informatika 1.

Rajz 06 gyakorló feladat

Programozási nyelvek Java

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Navigációs GPS adatok kezelése QGIS programmal (1.4 verzió) Összeállította dr. Siki Zoltán

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

7. Laboratóriumi gyakorlat, 1. rész : Vezérlési szerkezetek II.

Elemi Alkalmazások Fejlesztése II.

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Országos Területrendezési Terv térképi mel ékleteinek WMS szolgáltatással történő elérése, Quantum GIS program alkalmazásával Útmutató 2010.

Programozási nyelv Java

Adatelemzés SAS Enterprise Guide használatával. Soltész Gábor solteszgabee[at]gmail.com

Beágyazott rendszerek fejlesztése laboratórium DSP fejlesztési technológiák

XML Webszolgáltatás alapú osztott alkalmazás fejlesztése Johanyák Zsolt Csaba 1

Pénzügyi algoritmusok

RTCM alapú VITEL transzformáció felhasználó oldali beállítása Trimble Survey Controller szoftver használata esetén

EAF II Feladat dokumentáció IV. feladat 4. házi feladathoz

PONTOK TÁVOLSÁGÁNAK. MEGHATÁROZÁSA MEGHATÁROZOTT (ÚT)VONAL MENTÉN Network Analyst. Balázs Boglárka

AWK programozás Bevezetés

BME MOGI Gépészeti informatika 18. Grafika, fájlkezelés gyakorló óra. 1. feladat Készítsen alkalmazást az = +

Felhasználó által definiált adattípus

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Invitel levelezés címek esetén

Átírás:

Java XML kezelés labor Készítette: Goldschmidt Balázs, BME IIT, 2015. A feladatok megoldásához felhasználandó osztályok leírásait az alábbi URL-en találja meg: https://docs.oracle.com/javase/8/docs/api/javax/xml/parsers/package-summary.html https://docs.oracle.com/javase/8/docs/api/org/xml/sax/package-summary.html http://www.jdom.org/docs/apidocs/ Alapfeladat Készítsünk olyan Java alkalmazást, amely feldolgoz egy XML fájlt! A honlapon megtalálható XML fájl az OpenStreetMap BME körüli területét leíró adatait tartalmazza. 1 Egyszerű beolvasás SAX-szal Írjunk Java programot, amely egy SAX parser segítségével a honlapon megadott XML fájlban megszámolja az XML tag-eket. Az eredményt tag-enként külön-külön adjuk meg, pl: osm: 1 node: 3421 tag: 6893 way: 4581... Tippek A feladat megoldásához származtassuk az osztályunkat (class TagCounter) a org.xml.sax.helpers.defaulthandler osztályból. A számoláshoz definiáljuk felül a DefaultHandler startelement(...) metódust! A program az XML fájl nevét az -i parancssori argumentum után kapja, pl: java SaxTask -i bme.xml Legegyszerűbb az xml fájlt az eclipse projekt gyökerébe tenni, mert akkor a fenti relatív útvonallal lehet rá hivatkozni. A beolvasás elvégzéséhez a main metódusban használhatjuk az alábbi kódrészletet (filename az xml fájl elérési útja): DefaultHandler h = new TagCounter(); SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser p = factory.newsaxparser(); p.parse(new java.io.file(filename), h); } catch (Exception e) {e.printstacktrace();} 1

2 Egyszerű adatfeldolgozás SAX-szal Az előző feladatban elkészített alkalmazást módosítsuk úgy, hogy ki tudjuk szűrni a buszmegállókat! Nézzük meg az XML fájlt! A fájlban az <osm> gyökértag alatt <node> tag-ek vannak, amik a térkép jellemző pontjait írják le. A buszmegállók tipikusan az alábbi struktúrában vannak megadva: <node id="603263405" visible="true" version="13" changeset="28588770" timestamp="2015-02-03t13:04:17z" user="itamas80" uid="1719518" lat="47.4740451" lon="19.0484570"> <tag k="highway" v="bus_stop"/> <tag k="name" v="újbuda-központ M"/> <tag k="old_name" v="fehérvári út (Bocskai út)"/> <tag k="operator" v="bkv"/> <tag k="public_transport" v="stop"/> <tag k="ref:bkv" v="f02000"/> <tag k="verified" v="no"/> <tag k="wheelchair" v="limited"/> </node> A program a feldolgozás során minden buszmegállónál írja ki, hogy mi a buszmegálló neve (zárójelben a régi neve) és hogy alkalmas-e kerekesszékes megközelítésre: Megálló: Név: Újbuda-központ M (Fehérvári út (Bocskai út)) Kerekesszék: limited A fenti adatok tárolásához szükség lesz egy BusStop osztályra, aminek attribútumaiba tudjuk az egyes elemi adatokat berakni (name, oldname, wheelchair). A feldolgozáshoz érdemes egyszerű állapotgépet implementálni a következő eseményekre: <node> kezdődik: új buszmegálló-objektum (BusStop) létrehozása, az érvényesség false-ra állítása (ehhez a BusStop-ba kell egy boolean valid attribútum is). <tag> kezdődik, a "v" attribútum "bus_stop": az aktuális buszmegálló objektum valid mezőjét true-ra állítjuk. (attributes.getvalue("v")) <tag> kezdődik, a k attribútum valamelyik várt értéket tartalmazza: a megfelelő értéket beállítjuk. <node> végződik: ha az aktuális buszmegálló objektum érvényessége true, kiírjuk az adatait Az xml fájl tag-jeinek (<node>, <tag>, stb) nevét a startelement/endelement metódusok qname paraméterben kapjuk meg, az XML tag-ek attribútumaihoz az attributes paraméterben férünk hozzá. 2

3 Összetett adatfeldolgozás SAX-szal Az előző feladatban elkészített programot módosítsuk úgy, hogy a buszmegállókat a parancssorban megadott koordinátájú ponttól (pl. -lat 47.4786346 -lon 19.0555773) való távolságuk fordított sorrendjében írja ki! Az egyes buszmegállók mellé a fentieken kívül írjuk ki azt is, hogy légvonalban milyen messze vannak a megadott ponttól. A megoldáshoz a BusStop osztályba fel kell venni egy distance attribútumot is a távolság tárolásához, amit a startelement metódusban kell beállítani, ha <node> tag érkezik. Az érvényes BusStop-okat egy listába érdemes gyűjteni (endelement metódusban a korábbi kiíratás helyett). Ezt a listát a beolvasás után távolság szerint növekvő módon rendezve kell kiíratni. A távolság kiszámításához használhatjuk az alábbi két számítás bármelyikét. Az első változat pontosabb eredményt ad. double dist1(double lat1, double lon1, double lat2, double lon2) { double R = 6371000; // metres double phi1 = Math.toRadians(lat1); double phi2 = Math.toRadians(lat2); double dphi = phi2-phi1; double dl = Math.toRadians(lon2-lon1); double a = Math.sin(dphi/2) * Math.sin(dphi/2) + Math.cos(phi1) * Math.cos(phi2) * Math.sin(dl/2) * Math.sin(dl/2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); double d = R * c; return d; } double dist2(double lat1, double lon1, double lat2, double lon2) { double R = 6371000; // gives d in metres double phi1 = Math.toRadians(lat1); double phi2 = Math.toRadians(lat2); double dl = Math.toRadians(lon2-lon1); } double d = Math.acos( Math.sin(phi1)*Math.sin(phi2) + Math.cos(phi1)*Math.cos(phi2) * Math.cos(dl) ) * R; return d; 3

4 Egyszerű beolvasás JDOM-mal Írjon Java programot, amely a JDOM könyvtár segítségével a mellékelt XML fájlban megszámolja az XML tag-eket. A program az XML fájl nevét az -i parancssori argumentum után kapja, pl: java JDomTask -i bme.xml A beolvasáskor felépülő JDOM struktúrán kell úgy végigmennünk, hogy minden XML tag elemet érintsünk. A beolvasáshoz válasszuk a SAXParser-t. A JDOM használatához töltsük le a labor honlapjáról a JDOM jar-t az Eclipse-ben jobb egérkattintással nyissuk meg a projekt property-ablakát válasszuk a Java Build Path menüt, ebben pedig a Libraries fület klikkeljünk az Add external jars gombra, és válasszuk ki a lementett JDOM jar-t. 5 Egyszerű adatfeldolgozás JDOM-mal Az előző feladatban elkészített JDOM alapú alkalmazást módosítsuk úgy, hogy ki tudjuk válogatni a buszmegállókat! A SAX megoldással szemben most a feladat a JDOM szerkezet módosítása. Az <osm> gyökérelem minden olyan gyerekét (és annak leszármazottait) törölni kell, amely nem buszmegállót tartalmazó <node> 1. Használjuk az Element osztály detach() metódusát, de figyeljünk arra, hogy a detach azt a listát módosítja, amiben a szölőelem gyerekei vannak. Az eredményül kapott DOM modellt írassuk ki a parancssori paraméterként (-o kapcsoló) megadott fájlba! Pl: java DomTask -i bme.xml -o bme_bus.xml 1 vagyis az Element vagy nem <node>, vagy nincs olyan <tag> gyereke, amelyben a "v" attribútum "bus_stop" értékű. 4

6 Összetett adatfeldolgozás JDOM-mal Az előző feladatban elkészített programot módosítsuk úgy, hogy a buszmegállókat tartalmazó <node>-ok <tag> gyerekei közé felvesszük a parancssorban megadott koordinátájú ponttól (pl. -lat 47.4786346 -lon 19.0555773) számított távolságukat, pl: <tag k="distance" v="324.123"/> A megoldáshoz új Element objektumot kell készíteni "tag" névvel. Az új Element-ben be kell állítani a "k" és "v" attribútumok értékét. A "k" attribútum vegye fel a "distance" értéket, a "v" attribútum pedig a számított távolságot (Element.setAttribute(String, String) metódus). A távolság kiszámításához használhatjuk a korábbi két számítás valamelyikét. Végül az új, módosított Element-et hozzá kell adni a megfelelő <node> szülőhöz (Element osztály addcontent(...) metódusa). A kiíratáshoz használjuk az XMLOutputter osztály output metódusát! 5