110 likes | 333 Views
DOM. Document. DOM. XML Data. DOM — Schemat przetwarzania. Odczyt dokumentu i utworzenie drzewa obiektów w pamięci Przetwarzanie dokumentu (wyszukiwanie/dodawanie/usuwanie) Zapis wyniku. Przykładowy dokument XML. <root> <osoba imie=" Jan " nazwisko=" Kowalski ">
E N D
DOM Document DOM XML Data
DOM — Schemat przetwarzania • Odczyt dokumentu i utworzenie drzewa obiektów w pamięci • Przetwarzanie dokumentu (wyszukiwanie/dodawanie/usuwanie) • Zapis wyniku
Przykładowy dokument XML <root> <osoba imie="Jan" nazwisko="Kowalski"> Zatrudniony na stanowisku programisty </osoba> <osoba imie="Anna" nazwisko="Kowalska"> Zatrudniona na stanowisku asystenta </osoba> </root>
DOM — Przykład Przykład pokazujący wczytywanie dokumenty do pamięci import javax.xml.parsers.*; import org.w3c.dom.*; publicclass DomDemoOdczytu { publicstaticvoid main(String argv[]) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse("c://przyklad.xml"); //teraz możemy wykonywać operację na obiekcie dokument } }
Typy węzłów — nodeType() Stałe: ELEMENT_NODE, ATTRIBUTE_NODE, TEXT_NODE, . . .
Reprezentacja w pamięci <root> <osoba imie="Jan" nazwisko="Kowalski"> Zatrudniony na stanowisku … </osoba> <osoba imie="Anna" nazwisko="Kowalska"> Zatrudniona na stanowisku … </osoba> </root> • Element - <root>, <osoba> • Attr – imie, nazwisko • Text – Zatrudniony…, Zatrudniona…
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 <root> <osoba imie="Jan" nazwisko="Kowalski"> Zatrudniony na stanowisku … </osoba> <osoba imie="Anna" nazwisko="Kowalska"> Zatrudniona na stanowisku … </osoba> </root> 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(); //alternatywnysposóbodczytuatrybutu: String nazwisko = osoba.getAttribute("nazwisko"); String opis = osoba.getTextContent(); System.out.println(nazwisko+" "+imie+" "+opis); } //Wynikdziałaniakodu: //KowalskiJanZatrudnionynastanowisku... //KowalskaAnnaZatrudnionanastanowisku...
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); <root> <osoba imie="Jan" nazwisko="Kowalski"> Zatrudniony na stanowisku … </osoba> <osoba imie="Anna" nazwisko="Kowalska"> Zatrudniona na stanowisku … </osoba> </root>