DOM Ewa Dukała Piotr Muszyński
DOM DocumentBuilder Factory Document Builder XML Data object obiectobject DocumentDOM
DOM w przeglądarce Strony internetowe też w DOM JavaScript i dynamiczny HTML Przykład skryptu: var anchorTags = document.getElementsByTagName("a"); for (var i = 0; i < anchorTags.length ; i++) { alert("Atrybut href dla " + i + " elementu to: " + anchorTags[i].href + "\n"); }
DOM — Schemat przetwarzania Odczyt dokumentu i utworzenie drzewa obiektów w pamięci Przetwarzanie dokumentu (wyszukiwanie/dodawanie/usuwanie) Zapis wyniku
Przykładowy dokument XML Zatrudniony na stanowisku programisty Zatrudniona na stanowisku asystenta
DOM — Przykład Przykład pokazujący wczytywanie dokumenty do pamięci import javax.xml.parsers.*; import org.w3c.dom.*; public class DomDemoOdczytu { public static void main(String argv[]) throws Exception { DocumentBuilderFactory fabryka = DocumentBuilderFactory.newInstance(); DocumentBuilder budowniczy = factory.newDocumentBuilder(); Document document = budowniczy.parse("c://przyklad.xml"); //teraz możemy wykonywać operację na obiekcie dokument }
Typy węzłów — nodeType() Typ węzłanodeName()nodeValue() AttrNazwa atrybutuWartość atrybutu Comment#commentTreść komentarza Document#documentnull ElementNazwa elementunull EntityNazwa encjinull PInazwatreść Text#teksttreść Stałe: ELEMENT_NODE, ATTRIBUTE_NODE, TEXT_NODE,...
Reprezentacja w pamięci Element -, Attr – imie, nazwisko Text – Zatrudniony…, Zatrudniona… Zatrudniony na stanowisku … Zatrudniona na stanowisku …
Operacje odczytu danych Document.getDocumentElement() – zwraca główny element dokumentu (zawsze musi być jeden taki element) Node. getElementsByTagName(nazwa) – zwraca listę elementów, o określonej nazwie Element.getAttribute(nazwa) – używane do wyciągnięcia danych z atrybutu Node.getTextContent() – wyciąga dane tekstowe
Przykład operacji odczytu Element root = document.getDocumentElement(); NodeList osoby = root.getElementsByTagName("osoba"); int liczbaOsob = osoby.getLength(); for(int i=0; i<liczbaOsob; i++) { Element osoba = (Element)osoby.item(i); Attr attrImie = osoba.getAttributeNode("imie"); String imie = attrImie.getValue(); //alternatywny sposób odczytu atrybutu: String nazwisko = osoba.getAttribute("nazwisko"); String opis = osoba.getTextContent(); System.out.println(nazwisko+" "+imie+" "+opis); } //Wynik działania kodu: //Kowalski Jan Zatrudniony na stanowisku... //Kowalska Anna Zatrudniona na stanowisku... Zatrudniony na stanowisku … Zatrudniona na stanowisku …
Tworzenie XML w pamięci Pusty dokument tworzymy instrukcją: doc = DocumentBuilder.newDocument(); Element zawsze tworzymy z dokumentu Element elem = doc.createElement(„nazwa”); Dodanie elementu do dokumentu lub innege elementu: parent. appendChild(elem); Dodanie atrubutu elem.setAttribute(„nazwa”,”wartość”); Dodanie tekstu do elementu elem.setTextContent(„dane tekstowe”);
Przykład tworzenia dokumentu Document document = builder.newDocument(); Element root = document.createElement("root"); document.appendChild(root); Element osoba1 = document.createElement("osoba"); osoba1.setAttribute("imie", "Jan"); osoba1.setAttribute("nazwisko", "Kowalski"); osoba1.setTextContent("Zatrudniony na stanowisku..."); root.appendChild(osoba1);... root.appendChild(osoba2); Zatrudniony na stanowisku … Zatrudniona na stanowisku …
Transformacja Umożliwia przekształcenie jednego dokumentu XML w inny Może zamienić dokument XML w dokument HTML Plik opisujący transformację XSLT też jest dokumentem XML
Przykładowy dokument XSLT Nazwisko Imię Opis Zatrudniony na stanowisku … Zatrudniona na stanowisku …
Wykonanie transformacji w kodzie Document dok = StworzDokumentXml(); TransformerFactory tFactory = TransformerFactory.newInstance(); StreamSource xslt = new StreamSource("c://transformacja.xslt"); Transformer transformer = tFactory.newTransformer(xslt); StreamResult html = new StreamResult( new FileOutputStream("c://wynik.html")); transformer.transform(new DOMSource(dok), html); XMLXSLT XML transformacja XMLXSLT HTML transformacja
Przykładowy wynik transformacji dom dEMO Nazwisko Imię Opis Kowalski Jan Zatrudniony na stanowisku... Kowalska Anna Zatrudniona na stanowisku...
Koniec 1.Napisz program, który utworzy dokument XML z twoimi danymi osobowymi i zapisze ten dokument na dysku. 2. Wykożystując mechanizm XSLT przetransformuj xml z zadania pierwszego na stronę html reprezentującą wizytówkę i zapisz ją na dysku. 3.Napisz program, który umożliwi do xml stworzonego w pierwszym zadaniu dodania danych osobowych innych osób. Po zakończeniu dodawania dokument ma zostać uaktualniony na dysku.