Wykorzystywanie parsera DOM w programach Java i PL/SQL



Podobne dokumenty
Drzewa DOM. Maciej Zakrzewicz.

Aplikacje internetowe i rozproszone

Zaawansowane aplikacje WWW - laboratorium

Podstawy XML-a. Zaawansowane techniki programowania

Procesowanie dokumentów XML

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

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

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

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

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Programowanie obiektowe

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

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

akademia androida Składowanie danych część VI

XML we własnych aplikacjach

Instrukcja 3 Laboratorium z Podstaw Inżynierii Oprogramowania

Wywoływanie metod zdalnych

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Wprowadzenie do XML. Tomasz Traczyk.

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Aplikacja wielowątkowa prosty komunikator

Iteracyjno-rozwojowy cykl oprogramowania cykl 2. Java Zofia Kruczkiewicz 1

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

XML we własnych aplikacjach

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Przykład 1 Iteracja 1 tworzenia oprogramowania

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

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

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

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Wywoływanie metod zdalnych

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

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

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Zaawansowane aplikacje internetowe. Wykład 7. Implementacja procesów biznesowych w języku BPEL. wykład prowadzi: Maciej Zakrzewicz BPEL.

Programowanie obiektowe

Zaawansowane aplikacje internetowe. Wykład 2. Komunikacja XML. wykład prowadzi: Maciej Zakrzewicz. Komunikacja XML

Tworzenie aplikacji w języku Java

SAX2 pakiet org.xml.sax

Model semistrukturalny

Remote Method Invocation 17 listopada 2010

Wykład 7: Pakiety i Interfejsy

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Aplikacje w Javie- wykład 11 Wątki-podstawy

Zaawansowany kurs języka Python

Programowanie w Internecie. Java

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Podejście obiektowe do budowy systemów rozproszonych

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

Programowanie obiektowe

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

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

Java: interfejsy i klasy wewnętrzne

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

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Przykład 1 Iteracja 2 tworzenia oprogramowania Diagramy klas i sekwencji:

Programowanie obiektowe

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

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Ekspert radzi. mechanizm w enova, umożliwiający wskazanie domyślnej drukarki dla danego stanowiska i wydruku. Strona 1 z 8. Ekspert radzi.

Kurs programowania. Wykład 9. Wojciech Macyna

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

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

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Dokumentacja do API Javy.

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Perl a XML. Narzędzia informatyczne w językoznawstwie. Generowanie danych XML - Przykład. Generowanie danych XML. Perl - Przetwarzanie XML

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Systemy operacyjne na platformach mobilnych

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

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

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

Wykład 4: Klasy i Metody

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Aplikacje RMI Lab4

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

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Bloki anonimowe w PL/SQL

Aplikacje bazodanowe. dr inż. Arkadiusz Mirakowski

Aplikacje RMI

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

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

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Aplikacja wielow tkowa prosty komunikator

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

PHP. Tematyka wykładów: Język PHP PHP i bazy danych Rozszerzenia PHP

1 Atrybuty i metody klasowe

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

Środowisko publikacyjne oparte na XML-u. Szymon Zioło 1 maja 2004

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

Laboratorium Programowania Kart Elektronicznych

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

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Programowanie obiektowe

Transkrypt:

Wykorzystywanie parsera DOM w programach Java i PL/SQL Maciej Zakrzewicz mzakrz@cs.put.poznan.pl http://www.cs.put.poznan.pl/~mzakrz/

Parser DOM Aplikacja DOM API Parser DOM Dokument XML Drzewo DOM Parser DOM dokonuje przekształcenia dokumentu XML w drzewo DOM. Dostęp do funkcji parsera odbywa się w ramach interfejsu DOM API. Parser DOM jest dostępny w formie bibliotek programistycznych, m.in. Java (oracle.xml.parser.v2), PL/SQL (xmlparser, dbms_xmlparser)

DOM API: struktura fizyczna drzewa DOM getdocument() #document D katalog getdocumentelement() E getnodename() książka E... getchildnodes() getattributes() getchildnodes() isbn 14-2887-... A tytul E autorzy E rokwydania E #text T autor E #text T C++ XML 2002 #text T Fabio Arc... getnodevalue() getchildnodes() wydawnictwo E #text Mikom T cena E #text T 36 D DOCUMENT_NODE (9) E ELEMENT_NODE (1) A ATTRIBUTE_NODE (2) T TEXT_NODE (3)

Java: proces parsowania dokumentu XML new DOMParser() DOMParser.parse() DOMParser.getDocument() przetwarzanie drzewa DOM

Java: konwersja pliku XML do drzewa DOM import org.w3c.dom.*; import oracle.xml.parser.v2.*;... DOMParser dp = new DOMParser(); Node titlenode = null; NodeList titlenodelist = null; XMLDocument xmldoc = null; C++ XML Flash i XML. Techniki zaawansowane HTML and XML dla początkujących Java i XML Nauka języka XML Po prostu XML Poznaj XML w 24 godziny Programowanie Microsoft SQL Server 2000 z XML Vademecum XML XML Kompendium programisty XML dla każdego try { dp.parse("file://c:/katalog.xml"); } catch (Exception e) {System.out.println(e);} try { xmldoc = dp.getdocument(); titlenodelist = xmldoc.getelementsbytagname("tytul"); for (int i=0; i<titlenodelist.getlength(); i++) { titlenode = titlenodelist.item(i); System.out.println(titleNode.getFirstChild().getNodeValue()); } } catch (Exception e) {System.out.println(e);}

Java: parsowanie zmiennej String import org.w3c.dom.*; import oracle.xml.parser.v2.*; import java.io.*;... DOMParser dp = new DOMParser(); Node titlenode = null; NodeList titlenodelist = null; XMLDocument xmldoc = null; Zaawansowany XML SQL/XML try { dp.parse(new StringReader("<katalog><ksiazka><tytul>Zaawansowany XML</tytul>"+ "</ksiazka><ksiazka><tytul>sql/xml</tytul></ksiazka></katalog>")); } catch (Exception e) {System.out.println(e);} try { xmldoc = dp.getdocument(); titlenodelist = xmldoc.getelementsbytagname("tytul"); for (int i=0; i<titlenodelist.getlength(); i++) { titlenode = titlenodelist.item(i); System.out.println(titleNode.getFirstChild().getNodeValue()); } } catch (Exception e) {System.out.println(e);}

PL/SQL: proces parsowania dokumentu XML xmlparser.newparser xmlparser.parse(), xmlparser.parsebuffer(), xmlparser.parseclob() xmlparser.getdocument() przetwarzanie drzewa DOM przy użyciu funkcji pakietu xmldom xmlparser.freedocument() xmlparser.freeparser()

PL/SQL: konwersja pliku XML do drzewa DOM declare parser xmlparser.parser; xmldoc xmldom.domdocument; titlenode xmldom.domnode; titlenodelist xmldom.domnodelist; begin parser := xmlparser.newparser; xmlparser.parse(parser, 'http://miner/merlin.xml'); xmldoc := xmlparser.getdocument(parser); C++ XML Flash i XML. Techniki zaawansowane HTML and XML dla początkujących Java i XML Nauka języka XML Po prostu XML Poznaj XML w 24 godziny Programowanie Microsoft SQL Server 2000 z XML Vademecum XML XML Kompendium programisty XML dla każdego titlenodelist := xmldom.getelementsbytagname(xmldoc,'tytul'); for i in 0..xmldom.getLength(titleNodeList) - 1 loop titlenode := xmldom.item(titlenodelist, i); dbms_output.put_line(xmldom.getnodevalue(xmldom.getfirstchild(titlenode))); end loop; xmldom.freedocument(xmldoc); xmlparser.freeparser(parser); end;

PL/SQL: parsowanie zmiennej VARCHAR2 declare parser xmlparser.parser; xmldoc xmldom.domdocument; titlenode xmldom.domnode; titlenodelist xmldom.domnodelist; mydoc VARCHAR2(1000); begin mydoc := '<katalog><ksiazka><tytul>zaawansowany XML</tytul></ksiazka>' '<ksiazka><tytul>sql/xml</tytul></ksiazka></katalog>'; parser := xmlparser.newparser; xmlparser.parsebuffer(parser, mydoc); xmldoc := xmlparser.getdocument(parser); titlenodelist := xmldom.getelementsbytagname(xmldoc,'tytul'); for i in 0..xmldom.getLength(titleNodeList) - 1 loop titlenode := xmldom.item(titlenodelist, i); dbms_output.put_line(xmldom.getnodevalue(xmldom.getfirstchild(titlenode))); end loop; xmldom.freedocument(xmldoc); xmlparser.freeparser(parser); end; Zaawansowany XML SQL/XML

PL/SQL: ładowanie danych XML do tabeli declare parser xmlparser.parser; xmldoc xmldom.domdocument; xmlelem xmldom.domelement; booknode xmldom.domnode; TYTUL CENA booknodelist xmldom.domnodelist; innernode xmldom.domnode; -------------------- ---------- Access 2002. Projekt 79 innernodelist xmldom.domnodelist; title VARCHAR2(100); price NUMBER(8,2); Access 2002/XP PL dl 65 begin ASP.NET. Vademecum p 59 parser := xmlparser.newparser; C++ XML 41 xmlparser.parse(parser, 'http://miner/merlin.xml'); Dane w sieci WWW 31 xmldoc := xmlparser.getdocument(parser); Delphi 6. Praktyka p 104,5 xmlelem := xmldom.getdocumentelement(xmldoc); Delphi. Almanach 70 booknodelist := xmldom.getchildnodes(xmldom.makenode(xmlelem)); Dreamweaver 3. Bibli 120 Exchange 2000.NET Se 86 for i in 0..xmldom.getLength(bookNodeList) - 1 loop Flash 5 ActionScript 70 booknode := xmldom.item(booknodelist, i); innernodelist := xmldom.getchildnodes(booknode); for j in 0..xmldom.getLength(innerNodeList) - 1 loop innernode := xmldom.item(innernodelist, j); if xmldom.getnodename(innernode) = 'tytul' then title := xmldom.getnodevalue(xmldom.getfirstchild(innernode)); elsif xmldom.getnodename(innernode) = 'cena' then price := xmldom.getnodevalue(xmldom.getfirstchild(innernode)); end if; end loop; insert into ksiazki (tytul, cena) values (title,price); end loop; xmldom.freedocument(xmldoc); xmlparser.freeparser(parser); end;

Parser DOM: przekształcenia XSLT (Java) new DOMParser() XML DOMParser.parse() DOMParser.getDocument() new XSLProcessor() XSLProcessor.newXSLStylesheet() XSL XSLProcessor.processXSL() przetwarzanie drzewa wynikowego XML

Parser DOM: przekształcenia XSLT (Java) import org.w3c.dom.*; import oracle.xml.parser.v2.*; import java.net.*;... XSLProcessor xslproc = new XSLProcessor(); XSLStylesheet xsl = xslproc.newxslstylesheet(new URL( "file://c:/messages.xsl")); DOMParser parser = new DOMParser(); parser.parse("file://c:/messages.xml"); XMLDocument xmldoc = parser.getdocument(); XMLDocumentFragment htmldoc = xslproc.processxsl(xsl, xmldoc);... htmldoc.print(system.out);

Parser DOM: przekształcenia XSLT (PL/SQL) xmlparser.newparser XML xmlparser.parse(), xmlparser.parsebuffer(), xmlparser.parseclob() xmlparser.getdocument() xslprocessor.newprocessor() xslprocessor.newstylesheet() XSL xslprocessor.processxsl() xmlparser.freedocument() przetwarzanie drzewa wynikowego XML xmlparser.freeparser()

Parser DOM: przekształcenia XSLT (PL/SQL) declare parser xmlparser.parser; xslproc xslprocessor.processor; xsl xslprocessor.stylesheet; xmldoc xmldom.domdocument; htmldoc xmldom.domdocumentfragment; htmldocnode xmldom.domnode; result CLOB; begin dbms_lob.createtemporary(result,true); parser := xmlparser.newparser; xmlparser.parse(parser,'http://miner/messages.xml'); xmldoc := xmlparser.getdocument(parser); xslproc := xslprocessor.newprocessor; xsl := xslprocessor.newstylesheet('http://miner/messages.xsl',null); htmldoc := xslprocessor.processxsl(xslproc, xsl, xmldoc); htmldocnode := xmldom.makenode(htmldoc); xmldom.writetoclob(htmldocnode, result,'windows-1250'); printclobout(result); xmldom.freedocument(xmldoc); xmlparser.freeparser(parser); end;

Wykorzystywanie parsera SAX w programach Java

Parser SAX i SAX API SAX API to interfejs programistyczny wykorzystujący model zdarzeniowy do budowy parserów dokumentów XML Parser SAX odczytuje wskazany dokument XML i dla każdego zidentyfikowanego elementu składniowego wywołuje standardowe metody obiektu klasy przygotowanej przez programistę SAX API umożliwia konwersję dokumentu XML do dowolnej struktury danych, a nie wyłącznie do drzewa DOM Zadaniem programisty jest przygotowanie klasy dziedziczącej z DocumentHandler i oprogramowanie jej metod: startdocument() / enddocument() startelement() / endelement() characters()

Parser SAX Parser SAX Dokument XML Klasa przetwarzania dokumentu Aplikacja

Sekwencja wywoływania metod klasy DocumentHandler <?xml version="1.0" encoding="windows-1250"?> <katalog> <ksiazka url="http://dot.com/19821.html"> <tytul> C++ XML </tytul> <autorzy> <autor> Fabio Arciniegas </autor> </autorzy>... </katalog> startdocument() startelement("katalog") startelement("ksiazka","http:/...") startelement("tytul") characters("c++ XML") endelement("tytul") startelement("autorzy") startelement("autor") characters("fabio Arciniegas") endelement("autor") endelement("autorzy") endelement("katalog") enddocument()

Implementacja klasy DocumentHandler import org.xml.sax.*; public class MyHandler extends HandlerBase { public void startelement(string name, AttributeList atts) { // metoda wywoływana gdy parser SAX natrafi na znacznik otwierający // name nazwa znacznika, atts lista nazw i wartości atrybutów } }} public void endelement(string name) { // metoda wywoływana gdy parser SAX natrafi na znacznik zamykający // name nazwa znacznika } public void characters(char ch[], int start, int length) { String value = new String(ch, start, length); // metoda wywoływana gdy parser SAX zakończy odczyt treści znacznika // value odczytana treść

Wykorzystanie klasy DocumentHandler 1. Utwórz obiekt własnej klasy przetwarzania dokumentu XML 2. Utwórz obiekt parsera SAX (klasa SAXParser) 3. Za pomocą metody "setdocumenthandler" przyłącz obiekt własnej klasy przetwarzania dokumentu XML do obiektu parsera XML 4. Wywołaj metodę "parse" obiektu parsera, przekazując jej adres URL przetwarzanego dokumentu XML import org.xml.sax.*; import oracle.xml.parser.v2.*;... MyHandler handler = new MyHandler(); Parser parser = new SAXParser(); parser.setdocumenthandler(handler); parser.parse("file://c:/katalog.xml");

Przykładowa aplikacja Dokument XML <?xml version="1.0" encoding="windows-1250"?> <katalog> <ksiazka isbn="83-7279-215-1"> <tytul>c++ XML</tytul> <autorzy> <autor>fabio Arciniegas</autor> </autorzy> <rok>2002</rok> <wydawnictwo>mikom</wydawnictwo> <cena>36</cena> </ksiazka> <ksiazka isbn="83-4579-335-1">... </ksiazka> </katalog>

Przykładowa aplikacja Model obiektowy Vector katalog... Ksiazka String tytul Vector autorzy String wydawnictwo int rok float cena Ksiazka String tytul Vector autorzy String wydawnictwo int rok float cena Ksiazka String tytul Vector autorzy String wydawnictwo int rok float cena

Przykładowa aplikacja Implementacja modelu obiektowego import java.util.*; public class Ksiazka extends Object { String tytul; Vector autorzy = new Vector(); String wydawnictwo; int rok; float cena; public void settytul(string t) { tytul = t; } public void setwydawnictwo(string w) { wydawnictwo = w; } public void setrok(int r) { rok = r; } public void setcena(float c) { cena = c; } public void addautor(string a) { autorzy.add(a); } public String gettytul() { return tytul; } public String getwydawnictwo() { return wydawnictwo; } public int getrok() { return rok; } public float getcena() { return cena; } public int getnumautor() { return autorzy.size(); } public String getautor(int i) { return (String)autorzy.get(i); } }

import org.xml.sax.*; import java.util.*; Przykładowa aplikacja Klasa przetwarzania dokumentu (1/2) public class KatalogHandler extends HandlerBase { Vector katalog = new Vector(); Ksiazka tmp; int curr_tag; static final int TYTUL_TAG = 1; static final int ROK_TAG = 2; static final int WYDAWNICTWO_TAG = 3; static final int CENA_TAG = 4; static final int AUTOR_TAG = 5; public Vector getkatalog() { return katalog; } public void startelement(string name, AttributeList atts) { if (name.equals("ksiazka")) { tmp = new Ksiazka(); } else if (name.equals("tytul")) { curr_tag = TYTUL_TAG; } else if (name.equals("rok")) { curr_tag = ROK_TAG; } else if (name.equals("cena")) { curr_tag = CENA_TAG; }

Przykładowa aplikacja Klasa przetwarzania dokumentu (2/2) else if (name.equals("autor")) { curr_tag = AUTOR_TAG; } } else if (name.equals("wydawnictwo")) { curr_tag = WYDAWNICTWO_TAG; } public void endelement(string name) { } if (name.equals("ksiazka")) { katalog.add(tmp);} public void characters(char ch[], int start, int length) { String value = new String(ch, start, length); switch (curr_tag) { case TYTUL_TAG: tmp.settytul(value); break; case AUTOR_TAG: tmp.addautor(value); break; case WYDAWNICTWO_TAG: tmp.setwydawnictwo(value); break; case ROK_TAG: tmp.setrok(integer.parseint(value)); break; case CENA_TAG: tmp.setcena(float.parsefloat(value)); break; } }}

Przykładowa aplikacja Wykorzystanie parsera SAX import org.xml.sax.*; import oracle.xml.parser.v2.*; import java.util.*; public class PrintKatalog { public static void main(string[] args) { C++ XML, Mikom, 2002 Flash i XML. Techniki zaawansowane, Helion, 2002 HTML and XML dla początkujących, Promise, 2002 Java i XML, Helion, 2001 Nauka języka XML, Read Me, 2001 Po prostu XML, Helion, 2001... try { KatalogHandler handler = new KatalogHandler(); Parser parser = new SAXParser(); parser.setdocumenthandler(handler); parser.parse("file://c:/katalog.xml"); Vector katalog = handler.getkatalog(); for (int i=0; i<katalog.size(); i++) { Ksiazka k = (Ksiazka)katalog.elementAt(i); System.out.println(k.getTytul()+", "+k.getwydawnictwo()+", "+k.getrok()); } } catch (Exception e) {System.out.println(e);}}}