JAVA I XML ZAGADNIENIA: DOM, SAX, JAXB, XMLDecoder i XMLEncoder, ANT.

Podobne dokumenty
Wykorzystywanie parsera DOM w programach Java i PL/SQL

XML i Java. Technologie zarządzania treścią. dr inż. Robert Perliński rperlinski@icis.pcz.pl

Podstawy XML-a. Zaawansowane techniki programowania

Zaawansowane aplikacje WWW - laboratorium

Procesowanie dokumentów XML

Plan prezentacji. Przetwarzanie dokumentów XML JAXP SAX JAXP SAX DOM STAX XSLT. Przedmiot: XML i jego zastosowania. Dr inż. Stanisław Polak JAXB

XML i Java 1. XML Budowa dokumentu XML. Projektowanie systemów informatycznych

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 06

Programowane refleksyjne i serializacja

Katalog książek cz. 2

Systemy operacyjne na platformach mobilnych

XML we własnych aplikacjach

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

XML we własnych aplikacjach

Kotwasiński Obsługa XMLa z poziomu Javy

KLASY, INTERFEJSY, ITP

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusz Mikoda

SAX i DOM wykorzystanie XML-a we własnych aplikacjach. Simple API for XML Parsing Document Object Model

Instalacja. Zwykle należy też zwiększyć pamięć dla konsoli poleceniem: set ANT_HOME=c:\ant set JAVA_HOME=c:\jdk1.2.2 set PATH=%PATH%;%ANT_HOME%\bin

Podstawy i języki programowania

Programowanie obiektowe

akademia androida Składowanie danych część VI

Kurs języka Python Wykład 8. Przetwarzanie tekstu Wyrażenia regularne Biblioteka urllib Parsowanie html'a XML

Java. Programowanie Obiektowe Mateusz Cicheński

Db4o obiektowa baza danych wersja.net

Zaawansowany kurs języka Python

JAVA I SIECI. MATERIAŁY:

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

Bezpieczne uruchamianie apletów wg

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

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

PROGRAMOWANIE DYNAMICZNE

Modele dostępu do dokumentu XML. Implementacja modelu parser. SAX2 pakiet org.xml.sax. Działanie modelu SAX przykład

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Strumienie i serializacja

Zaawansowane aplikacje WWW - laboratorium

SAX2 pakiet org.xml.sax

XML in own applications

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Dokumentacja do API Javy.

Podstawy obiektowości

Aplikacje w środowisku Java

Aplikacje internetowe i rozproszone - laboratorium

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Jakarta POI. POIFS obsługa dokumentów OLE 2, HSSF dokumenty w formacie Excel'a, HWPF proste dokumenty w formacie Word 97,

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

XML we własnych aplikacjach

Polimorfizm, metody wirtualne i klasy abstrakcyjne

WSNHiD, Programowanie 2, Lab. 3. Trwałość danych

LINQ TO XML. Autor ćwiczenia: Marcin Wolicki

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 07

Programowanie obiektowe

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

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

Programowanie w Javie - wykład 3

XML we własnych aplikacjach

SOAP. Autor: Piotr Sobczak

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe

Git, Bitbucket, IntelliJ IDEA

Współbieżność w środowisku Java

public enum Environment { Development("Deweloperskie"), Test("Testowe"), Production("Produkcyjne"); private String name;

Wielowarstwowe aplikacje internetowe. Przetwarzanie XML. Autor wykładu: Maciej Zakrzewicz. Przetwarzanie XML

Wykład 4: Klasy i Metody

Metryki. Przykłady pomiaru złożoności modułowej i międzymodułowej oprogramowania. autor: Zofia Kruczkiewicz

Wykorzystanie XML a we własnych aplikacjach

Programowanie obiektowe

Kurs rozszerzony języka Python

Wykład 7: Pakiety i Interfejsy

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

libxml2 parser DOM dla C++ czwartek, 8 grudnia 11

Wykład dla studentów Informatyki Stosowanej UJ 2012/2013

Ćwiczenie 1. Przygotowanie środowiska JAVA

Programowanie obiektowe

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Informatyka II. Laboratorium.

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Aplikacje RMI Lab4

JDK można pobrać ze strony

Programowanie w środowisku graficznym- wykład 2 Java - Klasy

Enterprise JavaBeans

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Programowanie obiektowe

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ mlew@ippt.gov.pl ]

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

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Remote Method Invocation 17 listopada 2010

XML we własnych aplikacjach

Java Platform Micro Edition

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

1. Metryki złożoności modułowej i międzymodułowej Chidamber & Kemerer (CK)

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Tablice i łańcuchy znakowe jako obiektowe typy danych. dr Jarosław Skaruz

Wywoływanie metod zdalnych

Wykład 6. Charakterystyki zewnętrzne a wewnętrzne oprogramowania (2) Narzędzia do pomiaru programowania. autor: Zofia Kruczkiewicz

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Podejście obiektowe do budowy systemów rozproszonych

Wprowadzenie. Narzędzia i środowiska programistyczne. Laboratorium 1. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

Transkrypt:

JAVA I XML ZAGADNIENIA: DOM, SAX, JAXB, XMLDecoder i XMLEncoder, ANT. MATERIAŁY: http://www.mkyong.com/tutorials/java-xml-tutorials/ http://ant.apache.org http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 1

XML <?xml version="1.0" encoding="utf-8"?> <rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"> <channel> <title>aktualności</title> <link>http://www.uj.edu.pl/uniwersytet/aktualnosci/...</link> <description>aktualności Uniwersytetu Jagiellońskiego</description> <item> <title>lista Pamięci - Stanisław Szczur</title> <link>http://www.uj.edu.pl/uniwersytet/aktualnosci/...</link> <description /> <pubdate>thu, 20 Dec 2012 07:44:00 GMT</pubDate> <dc:creator>jolanta Herian-Ślusarska</dc:creator> <dc:date>2012-12-20t07:44:00z</dc:date> </item> <item>...</item>... </channel> </rss> http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 2

DOM ODCZYT Parsery DOM (Document Object Model) tworzą drzewo reprezentujące dane zawarte w dokumencie XML. Po zbudowaniu DOM przetwarzanie odbywa się na modelu w pamięci operacyjnej. import java.io.ioexception; import java.net.url; import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.saxexception; public class DOMExample { public static void main(string[] args) throws ParserConfigurationException,SAXException,IOException { http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 3

DOM ODCZYT URL url = new URL( "http://www.uj.edu.pl/uniwersytet/aktualnosci/-/journal/rss/10172/36018? doasgroupid=10172&refererplid=10181"); // jakis RSS // domyslna fabryka obiektow tworzących dokumenty DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance(); // obiekt tworzący dokumenty DocumentBuilder dbuilder = dbfactory.newdocumentbuilder(); // tworzenie modelu DOM na podstawie zrodla XML (parsowanie XML'a) Document doc = dbuilder.parse(url.openstream()); // obiekt doc umozliwia dostep do wszystkich danych zawartych // w dokumencie XML System.out.println("Root element :" + doc.getdocumentelement().getnodename()); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 4

DOM ODCZYT NodeList nlist = doc.getelementsbytagname("item"); for (int i = 0; i < nlist.getlength(); i++) { // lista dzieci i-tego itema Node n = nlist.item(i); // czy dziecko jest elementem? if (n.getnodetype() == Node.ELEMENT_NODE) { Element e = (Element) n; System.out.println("Tytul : " + gettagvalue("title", e)); System.out.println("Link : " + gettagvalue("link", e)); System.out.println("dodane przez : " + gettagvalue("dc:creator", e)); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 5

DOM ODCZYT // zwraca wartosc zapisana w tagu s wewnatrz elementu e private static String gettagvalue(string s, Element e) { // lista dzieci e o nazwie s NodeList nl = e.getelementsbytagname(s) // pierwszy wpis z tej listy.item(0) // to co on zawiera jego dzieci.getchildnodes(); // pierwsze z tych dzieci Node n = (Node) nl.item(0); // zawartosc, ktora tam jest return n.getnodevalue(); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 6

DOM MODYFIKACJA Możliwa jest także modyfkacja zawartości DOM utworzonego w wyniku parsowania dokumentu XML. Przykładowo: // pobieramy element title i zmieniamy go if ("title".equals(node.getnodename())) { node.settextcontent("nowy tytul"); // kasujemy link if ("link".equals(node.getnodename())) { itemelement.removechild(node); // tworzenie nowego dokumentu Document doc = docbuilder.newdocument(); Element e = doc.createelement("root"); doc.appendchild(e); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 7

DOM ZAPIS Zapis dokumentu: // domyslna fabryka transformatorow TransformerFactory transformerfactory = TransformerFactory.newInstance(); // nowy tranformator Transformer transformer = transformerfactory.newtransformer(); // wejscie transformatora (skad transformator bierze dane) DOMSource source = new DOMSource(doc); // wyjscie transformatora (gdzie zmienione dane zostana zapisane) StreamResult result = new StreamResult(new File("file.xml")); // uruchomienie transformatora zapis DOM do pliku w formacie XML transformer.transform(source, result); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 8

SAX ODCZYT SAX (Simple API for XML) w miarę czytania dokumentu wywołuje zdarzenia związane z parsowaniem. Parsery SAX są szybsze i nie wymagają tak dużej ilości pamięci jak DOM. import java.io.ioexception; import java.net.url; import javax.xml.parsers.*; import org.xml.sax.*; public class SAXExample { public static void main(string[] args) throws SAXException, IOException, ParserConfigurationException{ URL url = new URL("http://www.uj.edu.pl/..."); SAXParserFactory f = SAXParserFactory.newInstance(); SAXParser saxparser = f.newsaxparser(); DefaultHandler handler = new ExampleSAXHandler(); saxparser.parse(url.openstream(), handler); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 9

DefaultHandler void characters(char[] ch, int start, int length) wywoływane przy odczycie znaku wewnątrz elementu, void enddocument() wywoływane gdy koniec dokumentu void endelement(string uri, String localname, String qname) koniec elementu, void error(saxparseexception e) błąd (możliwy do naprawienia), void fatalerror(saxparseexception e) błąd, void ignorablewhitespace(char[] ch, int start, int length) ignorowany pusty znak, void startdocument() początek dokumentu, void startelement(string uri, String localname, String qname, Attributes attributes) początek elementu void warning(saxparseexception e) ostrzeżenie parsera.... http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 10

DefaultHandler import org.xml.sax.attributes; import org.xml.sax.saxexception; import org.xml.sax.helpers.defaulthandler; class ExampleSAXHandler extends DefaultHandler { public void startelement(string uri, String localname, String qname, Attributes attributes) throws SAXException { System.out.println("Element :" + qname); public void endelement(string uri, String localname, String qname) throws SAXException { System.out.println("Konie elementu :" + qname); public void characters(char ch[], int start, int length) throws SAXException { System.out.println("zawartosc : "+new String(ch, start, length)); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 11

JAXB JAXB (Java Architecture for XML Binding) to standard serializacji XML dla obiektów Javy. Został on zintegrowany z JDK/JRE od wersji 1.6 import java.io.file; import javax.xml.bind.*; import javax.xml.bind.annotation.*; @XmlRootElement class Person { String name; int age; public String getname() { return name; http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 12

JAXB @XmlElement public void setname(string name) { this.name = name; public int getage() { return age; @XmlElement public void setage(int age) { this.age = age; public String tostring() { return this.name + " (" + this.age + ")"; http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 13

JAXB public class JAXBExample{ public static void main(string[] args) throws JAXBException { Person p = new Person(); p.setname("barnaba"); p.setage(33); File f = new File("person.xml"); JAXBContext ctx = JAXBContext.newInstance(Person.class); Marshaller marshaller = ctx.createmarshaller(); marshaller.setproperty(marshaller.jaxb_formatted_output, true); marshaller.marshal(p, System.out); marshaller.marshal(p, f); p = null; Unmarshaller unmarshaller = ctx.createunmarshaller(); p = (Person)unmarshaller.unmarshal(f); System.out.println(p); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 14

SERIALIZACJA I XML Inna metoda serializacji niektórych obiektów do plików tekstowych w formacie XML: XMLEncoder: XMLEncoder e = new XMLEncoder(new FileOutputStream("jbutton.xml")); e.writeobject(new JButton("Hello world")); e.close(); XMLDecoder: XMLDecoder d = new XMLDecoder(new FileInputStream("jbutton.xml")); obj = d.readobject(); d.close(); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 15

ANT Ant jest narzędziem umożliwiającym automatyzację procesów związanych z budowaniem programów. Jego podstawowe cechy to: konfguracja zadań zapisana w formacie XML, wieloplatformowość m. in. Linux, Unix (np. Solaris and HP-UX), Windows 9x i NT, OS/2 Warp, Novell Netware 6 oraz MacOS X. rozszerzalność w oparciu o klasy napisane w Javie. Ant jest rozwijany w ramach Apache Software Foundation. Strona domowa projektu: http://ant.apache.org. http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 16

ANT Przykładowy plik konfguracyjny dla anta (domyślnie build.xml) <project name="project" default="default" basedir="."> <description> jakis opis </description> <target name="default" depends="depends" description="description"> <jar destfile="bendmetter.jar" includes="**/*.class" excludes="tests/*.*" basedir="bin"></jar> </target> <target name="depends"> </target> </project> Aby go wykonać wpisujemy w konsoli polecenie ant. http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2016/2017 17

DZIĘKUJĘ ZA UWAGĘ