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

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

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Drzewa DOM. Maciej Zakrzewicz.

Procesowanie dokumentów XML

Zaawansowane aplikacje WWW - laboratorium

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

1 XML w bazach danych

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

Podstawy XML-a. Zaawansowane techniki programowania

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

XML we własnych aplikacjach

Program wykładów. Aplikacje internetowe i rozproszone. Podstawy usługi WWW. Architektury aplikacji intrai internetowych

XML we własnych aplikacjach

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

Wprowadzenie do XML. Tomasz Traczyk.

Model semistrukturalny

Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane

Aplikacje internetowe i rozproszone

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

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

Kotwasiński Obsługa XMLa z poziomu Javy

SAX2 pakiet org.xml.sax

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

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

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

Zaawansowany kurs języka Python

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

Zaawansowane aplikacje WWW - laboratorium

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

UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

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

WYKŁAD 3 XML DOM XML DOCUMENT OBJECT MODEL CZĘŚĆ 1

Obiektowy model dokumentu. Katedra Mikroelektroniki i Technik Informatycznych

Podstawy języka XML. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

XML in own applications

akademia androida Składowanie danych część VI

Wykorzystanie XML a we własnych aplikacjach

XML extensible Markup Language. część 5

Kurs rozszerzony języka Python

Aplikacje internetowe i rozproszone - laboratorium

DOM SAX AJAX. SAX,DOMiAJAX. Bartłomiej Świercz. Katedra Mikroelektroniki i Technik Informatycznych. Łódź, 11 kwietnia 2010

Programowanie obiektowe

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

XQuery. XQuery. Przykład. dokument XML. XQuery (XML Query Language) XQuery 1.0: An XML Query Language. W3C Recommendation

Programowanie obiektowe

Programowanie obiektowe

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

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

Przykład 1 Iteracja 1 tworzenia oprogramowania

XML we własnych aplikacjach

XML we własnych aplikacjach

Metody dostępu do danych

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

METODY REPREZENTACJI INFORMACJI

Informatyka (10) dr inż. Katarzyna Palikowska Katedra Transportu Szynowego i Mostów p. 4 Hydro

Spis treści. Przedmowa

Wprowadzenie do technologii XML

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

XPath XML Path Language. XPath. XSLT część 1. XPath data model. Wyrażenia XPath. Location paths. Osie (axes)

Systemy operacyjne na platformach mobilnych

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

XML extensible Markup Language 6

XML w bazach danych, standardy wiążące dokumenty XML

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Diagramy klas. dr Jarosław Skaruz

5.14 JSP - Przykład z obiektami sesji Podsumowanie Słownik Zadanie... 86

XQuery. sobota, 17 grudnia 11

Wybrane działy Informatyki Stosowanej

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

4 Web Forms i ASP.NET Web Forms Programowanie Web Forms Możliwości Web Forms Przetwarzanie Web Forms...152

Podstawy programowania. Wprowadzenie

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

XML we własnych aplikacjach

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

Ajax. Æwiczenia IDZ DO KATALOG KSI EK TWÓJ KOSZYK CENNIK I INFORMACJE CZYTELNIA PRZYK ADOWY ROZDZIA. SPIS TREœCI KATALOG ONLINE

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

1 Wprowadzenie do J2EE

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

Zasady programowania Dokumentacja

Kurs języka Python Wykład 6. Pliki tekstowe Pliki rekordów Pliki CSV Strumienie

Zaawansowane aplikacje internetowe - laboratorium

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Programowanie obiektowe

Aplikacje WWW - laboratorium

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

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

Java w 21 dni / Rogers Cadenhead. Gliwice, cop Spis treści. O autorze 11. Wprowadzenie 13 TYDZIEŃ I JĘZYK JAVA

Programowanie obiektowe

Laboratorium 8 Diagramy aktywności

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

Strumieniowe bazy danych. Piotr i Paweł

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

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Przykładowy dokument XML

PROGRAM NAUCZANIA DLA ZAWODU TECHNIK INFORMATYK, O STRUKTURZE PRZEDMIOTOWEJ

1 Atrybuty i metody klasowe

Usługi WWW. dr Zbigniew Lipiński Instytut Matematyki i Informatyki ul. Oleska Opole zlipinski@math.uni.opole.pl

Aplikacje WWW - laboratorium

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Transkrypt:

Przetwarzanie XML Autor wykładu: Maciej Zakrzewicz Przetwarzanie XML

Plan wykładu Modelowanie dokumentów XML za pomocą drzew DOM Specyfikacja W3C DOM API Implementacja drzew DOM w języku Java Nawigacja wewnątrz drzew DOM w języku Java Język zapytań XPath 1.0 Parsery DOM Przetwarzanie XML (2)

Document Object Model (DOM) Standard modelowania dokumentów XML przy użyciu struktury drzewa Forma reprezentacji dokumentów XML w pamięci komputera Parser DOM Biblioteka DOM API Język zapytań XPath Przetwarzanie XML (3)

Przykładowy dokument XML <katalog> <ksiazka isbn="83-7243-134-5"> <tytul>xml krok po kroku</tytul> <cena>43</cena> <autorzy> <autor>michael J. Young</autor> <autor>katarzyna Tryc</autor> </autorzy> <wydawnictwo>read Me</wydawnictwo> <rok>2000</rok> </ksiazka> </katalog> Przetwarzanie XML (4)

Przetwarzanie XML (5) Przykład struktury drzewa DOM korzeń węzeł elementu węzeł tekstowy węzeł atrybutu <ksiazka> <katalog> isbn="83-7243-134-5" <tytul> <cena> <autorzy> <wydawnictwo> <rok> XML krok po kroku 43 <autor> <autor> Michael J. Young Katarzyna Tryc Read Me 2000

Implementacja drzew DOM W3C DOM API Node NodeList Document Element Attr Text Przetwarzanie XML (6)

W3C DOM API: Typ Node (1) Typ Node reprezentuje węzeł w drzewie DOM (węzeł elementu, węzeł tekstowy, itd.) Właściwości attributes childnodes firstchild lastchild nextsibling nodename nodetype nodevalue parentnode previoussibling lista atrybutów węzła lista węzłów potomnych pierwszy węzeł potomny ostatni węzeł potomny prawy węzeł sąsiedni nazwa węzła identyfikator typu węzła wartość węzła węzeł nadrzędny lewy węzeł sąsiedni Przetwarzanie XML (7)

Przetwarzanie XML (8) W3C DOM API: Typ Node (2) Typ Node reprezentuje węzeł w drzewie DOM (węzeł elementu, węzeł tekstowy, itd.) Operacje appendchild(n) clonenode(b) haschildnodes() insertbefore(n,n) removechild(n) replacechild(n,n) dołącza nowy węzeł jako ostatni węzeł potomny zwraca kopię węzła z/bez węzłami potomnymi zwraca prawdę, jeżeli węzeł zawiera węzły potomne dołącza nowy węzeł jako węzeł potomny przed wskazanym węzłem usuwa wskazany węzeł potomny zamienia istniejący węzeł potomny z podanym węzłem

Przetwarzanie XML (9) W3C DOM API: Typ NodeList Typ NodeList reprezentuje listę obiektów typu Node Właściwości length liczba elementów na liście Operacje item(i) zwraca i-ty element listy

Przetwarzanie XML (10) W3C DOM API: Typ Document Typ Document modeluje całe drzewo DOM; wszystkie węzły drzewa są jego potomkami Właściwości documentelement doctype element najwyższego poziomu w dokumencie DTD lub XML Schema dla dokumentu Operacje createattribute(s) createcomment(s) createelement(s) createtextnode(s) getelementsbytagname(s) tworzy nowy węzeł atrybutu tworzy nowy węzeł komentarza tworzy nowy element tworzy nowy węzeł tekstowy zwraca listę węzłów o podanej nazwie

Przetwarzanie XML (11) W3C DOM API: Typ Element Typ Element modeluje węzeł reprezentujący parę znaczników XML Właściwości tagname Operacje getattribute(s) getattributenode(s) getelementsbytagname(s) removeattribute(s) removeattributenode(n) setattribute(s,s) setattributenode(n) nazwa węzła zwraca wartość podanego atrybutu zwraca węzeł podanego atrybutu zwraca zbiór węzłów o podanej nazwie usuwa wartość podanego atrybutu usuwa podany węzeł atrybutu ustawia nową wartość atrybutu wstawia nowy węzeł atrybutu

Implementacja W3C DOM: Java Typy DOM zaimplementowano jako interfejsy w pakiecie org.w3c.dom Klasy rzeczywiste W3C DOM API zaimplementowano w Java API for XML Processing (m.in. javax.xml, javax.xml.parsers, javax.xml.transform, javax.xml.xpath) Przetwarzanie XML (12)

Konstrukcja drzewa DOM w języku Java DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newdocumentbuilder(); Document xmldoc = db.newdocument(); Node katalognode = xmldoc.createelement("katalog"); xmldoc.appendchild(katalognode); Node ksiazkanode = xmldoc.createelement("ksiazka"); katalognode.appendchild(ksiazkanode); Node tytulnode = xmldoc.createelement("tytul"); ksiazkanode.appendchild(tytulnode); Node cenanode = xmldoc.createelement("cena"); ksiazkanode.appendchild(cenanode); Node tytultext = xmldoc.createtextnode("zaawansowany XML"); tytulnode.appendchild(tytultext); Node cenatext = xmldoc.createtextnode("85"); cenanode.appendchild(cenatext); <tytul> Zaawansowany XML <katalog> <ksiazka> <cena> 85 Przetwarzanie XML (13)

Przetwarzanie XML (14) DOM API: Funkcje nawigacyjne 1 ELEMENT_NODE 2 ATTRIBUTE_NODE 3 TEXT_NODE 9 DOCUMENT_NODE getnodetype() #document 9 getdocumentelement() katalog 1 getnodename() książka 1 getchildnodes() getattributes() getchildnodes() isbn 2 tytul 1 autorzy 1 rokwydania 1 wydawnictwo 1 cena 1 14-2887- getchildnodes() #text 3 autor 1 #text 3 #text 3 #text 3 C++ XML 2002 Mikom 36 getnodevalue() #text 3 Fabio Arc

Przetwarzanie XML (15) Java: nawigacja w drzewie DOM getchildnodes() 1 Document xmldoc; Node docnode = null, booknode = null, elementnode = null; NodeList docnodelist = null, booknodelist = null; docnode = xmldoc.getdocumentelement(); 3 5 docnodelist = docnode.getchildnodes(); for (int i=0; i<docnodelist.getlength(); i++) { booknode = docnodelist.item(i); booknodelist = booknode.getchildnodes(); for (int j=0; j<booknodelist.getlength(); j++) { elementnode = booknodelist.item(j); if (elementnode.getnodename().equals("tytul")) Access 2002. Projektowanie baz danych. Księga eksperta Access 2002/XP PL dla każdego ASP.NET. Vademecum profesjonalisty C++ XML Dane w sieci WWW Delphi 6. Praktyka programowania - tom 1,2 Delphi. Almanach System.out.println(elementNode.getFirstChild().getNodeValue());}} 2 4 6

Przetwarzanie XML (16) Java: nawigacja w drzewie DOM getattributes() 1 3 4 Document xmldoc; Node docnode = null, booknode = null, isbnnode = null; NodeList docnodelist = null, booknodelist = null; docnode = xmldoc.getdocumentelement(); docnodelist = docnode.getchildnodes(); for (int i=0; i<docnodelist.getlength(); i++) { } booknode = docnodelist.item(i); isbnnode = booknode.getattributes().item(0); System.out.println(isbnNode.getNodeValue()); 2 83-7197-669-0 83-7197-786-7 83-7197-691-7 83-7279-215-1 83-7279-149-X 83-7279-214-3 83-7197-469-8 83-7197-377-2

Przetwarzanie XML (17) Java: nawigacja w drzewie DOM getelementsbytagname() 1 2 Document xmldoc; Node titlenode = null; NodeList titlenodelist = null; Access 2002. Projektowanie baz danych. Access 2002/XP PL dla każdego ASP.NET. Vademecum profesjonalisty C++ XML Dane w sieci WWW Delphi 6. Praktyka programowania - tom 1,2 Delphi. Almanach titlenodelist = xmldoc.getelementsbytagname("tytul"); for (int i=0; i<titlenodelist.getlength(); i++) { titlenode = titlenodelist.item(i); System.out.println(titleNode.getFirstChild().getNodeValue()); } 3

Przetwarzanie XML (18) Java: konwersja drzewa DOM do pliku XML TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newtransformer(); t.transform(new DOMSource(xmlDoc), new StreamResult(new FileOutputStream("C:\\katalog.xml"))); javax.xml.transform javax.xml.transform.dom javax.xml.transform.stream <?xml version = '1.0' encoding = 'WINDOWS-1250'?> <katalog> <ksiazka isbn="83-7197-669-0"> <tytul>c++ XML</tytul> <autorzy> <autor>fabio Arciniegas</autor> </autorzy> <rokwydania>2002</rokwydania> <wydawnictwo>mikom</wydawnictwo> <cena>36</cena> </ksiazka> <ksiazka isbn="83-7197-669-0">

Język XPath 1.0 Specyfikacja języka do adresowania, odczytywania i przeszukiwania drzew DOM Odgrywa podobną rolę w stosunku do drzew DOM, jak język SQL w stosunku do relacyjnych baz danych Notacja przypominająca ścieżki dostępu w systemach plików Wynik zapytania: lista węzłów spełniających warunki selekcji Przetwarzanie XML (19)

Przetwarzanie XML (20) Wyrażenia ścieżkowe (1) Rozpoczynając od korzenia, wejdź do każdego węzła "katalog" i spośród jego węzłów podrzędnych wybierz wszystkie węzły "ksiazka" drzewo DOM: zapytanie: <katalog> <ksiazka> <ksiazka> <ksiazka> /katalog/ksiazka wynik: <ksiazka> <ksiazka> <ksiazka>

Przetwarzanie XML (21) Wyrażenia ścieżkowe (2) Wybierz wszystkie węzły "tytul" znajdujące się w dowolnym miejscu drzewa drzewo DOM: <katalog> <ksiazka> <ksiazka> <ksiazka> <tytul> <tytul> <tytul> zapytanie: //tytul wynik: <tytul> <tytul> <tytul>

Przetwarzanie XML (22) Wyrażenia ścieżkowe (3) Wybierz wszystkie węzły podrzędne w stosunku do wszystkich węzłów "ksiazka" znajdujących się w dowolnym miejscu drzewa drzewo DOM: <katalog> <ksiazka> <ksiazka> <ksiazka> <tytul> <cena> <autorzy> zapytanie: //ksiazka/* wynik: <tytul> <cena> <autorzy>

Przetwarzanie XML (23) Wybór n-tego węzła Wybierz każdy pierwszy węzeł "autor" podrzędny w stosunku do każdego węzła "autorzy", znajdującego się w dowolnym miejscu drzewa drzewo DOM: zapytanie: <autorzy> <autorzy> <autorzy> <autor> <autor> <autor> <autor> <autor> //autorzy/autor[1] wynik: <autor> <autor> <autor>

Przetwarzanie XML (24) Warunki selekcji (1) drzewo DOM Wybierz wszystkie węzły "ksiazka" znajdujące się w dowolnym miejscu drzewa, posiadające węzeł podrzędny "cena", z którym związana jest wartość "10" zapytanie: <ksiazka> <ksiazka> <ksiazka> <cena> <cena> <cena> 50 10 10 //ksiazka[cena=10] wynik: <ksiazka> <ksiazka>

Przetwarzanie XML (25) Warunki selekcji (2) drzewo DOM Wybierz wszystkie węzły isbn "ksiazka" znajdujące się w dowolnym zapytanie: miejscu drzewa, posiadające węzeł węzeł atrybutowy "isbn" o wartości "11-22-33" wynik: <ksiazka> <ksiazka> <ksiazka> isbn //ksiazka[@isbn=11-22-33] <ksiazka> isbn 11-22-33 22-33-44 33-44-55

Przetwarzanie XML (26) Ćwiczenie zapytań XPath XPath Visualizer

Funkcje XPath w DOM API selectnodes() lista węzłów pobranych przez podane zapytanie XPath selectsinglenode() pierwszy znaleziony węzeł z wyniku zapytania XPath valueof() treść pierwszego znalezionego węzła z wyniku zapytania XPath Przetwarzanie XML (27)

Przetwarzanie XML (28) Zapytania XPath: selectnodes() Document xmldoc; Node titlenode = null; NodeList querynodelist = null; querynodelist = xmldoc.selectnodes("//ksiazka[rokwydania='2002']/tytul"); for (int i=0; i<querynodelist.getlength(); i++) { } titlenode = querynodelist.item(i); C++ XML Flash i XML. Techniki zaawansowane HTML and XML dla początkujących Programowanie Microsoft SQL Server 2000 z XML Vademecum XML XML Kompendium programisty System.out.println(titleNode.getFirstChild().getNodeValue());

Przetwarzanie XML (29) Parser DOM Aplikacja DOM API Parser DOM Dokument XML Drzewo DOM

Przetwarzanie XML (30) Generowanie drzewa DOM Node titlenode = null; NodeList titlenodelist = 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 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newdocumentbuilder(); Document xmldoc = db.parse(new File("katalog.xml")); titlenodelist = xmldoc.getelementsbytagname("tytul"); for (int i=0; i<titlenodelist.getlength(); i++) { titlenode = titlenodelist.item(i); System.out.println(titleNode.getFirstChild().getNodeValue()); }

Java API for XML Processing (JAXP) Interfejs programistyczny umożliwiający: parsowanie dokumentów XML walidację dokumentów XML transformację dokumentów XML przeszukiwanie dokumentów XML Podstawowe elementy: Document Object Model (DOM) Simple API for XML (SAX) Streaming API for XML (StAX) Przetwarzanie XML (31)

Przetwarzanie XML (32) Simple API for XML (SAX) 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 callback obiektu klasy przygotowanej przez programistę klasa dziedzicząca z DocumentHandler SAX API umożliwia konwersję dokumentu XML do dowolnej struktury danych, a nie wyłącznie do drzewa DOM nie wymaga przechowania całego dokumentu w pamięci aplikacja musi pamiętać stan między wywołaniami metod callback

Przetwarzanie XML (33) SAX Przykład 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 } public void endelement(string name) { // metoda wywoływana gdy parser SAX natrafi na znacznik zamykający } 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 }}

Przetwarzanie XML (34) SAX Korzystanie z 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.*; MyHandler handler = new MyHandler(); Parser parser = new SAXParser(); parser.setdocumenthandler(handler); parser.parse("file://c:/katalog.xml");

SAX Przykład sekwencji zdarzeń <?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() Przetwarzanie XML (35)

Streaming API for XML (StAX) Parsery DOM i SAX to dwa skrajne podejścia do parsowania XML StAX stanowi próbę opracowania rozwiązania pośredniego mniejsze wymagania pamięciowe niż DOM wygodniejszy i bardziej naturalny niż SAX Cechy parsera StAX: strumieniowy odczyt kolejnych porcji dokumentu (przesuwanie kursora w przód po dokumencie) podejście PULL, a nie PUSH jak w SAX Przetwarzanie XML (36)

Przetwarzanie XML (37) StAX - Przykład import javax.xml.stream.*; URL u = new URL("http://www.test.org/"); InputStream in = u.openstream(); XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader parser = factory.createxmlstreamreader(in); while (true) { int event = parser.next(); if (event == XMLStreamConstants.END_DOCUMENT) { parser.close(); break; } if (event == XMLStreamConstants.START_ELEMENT) { System.out.println(parser.getLocalName()); } } <html> <head> <title>test</title> </head> <body> <h1>welcome! </h1> html head title body h1

Podsumowanie Przetwarzanie danych XML na poziomie drzew DOM Standardowa specyfikacja W3C DOM API Niezależność od języka programowania Realizacja złożonych zapytań w języku XPath Automatyczna transformacja XML->DOM za pomocą parserów DOM Inne typy parserów: SAX, StAX Przetwarzanie XML (38)

Materiały dodatkowe "Document Object Model", http://www.w3.org/dom "Java API for XML Processing", http://java.sun.com/webservices/jaxp/ "XML Path Language", http://www.w3.org/tr/xpath "XPath Tutorial", http://www.w3schools.com/xpath/default.asp Przetwarzanie XML (39)