Przykładowe programy (zawartość może się zmieniać w trakcie kolejnych zajęć):
Pod Linuxem można kompilować i uruchamiać programy poleceniami w terminalu. javac -d bin `find -name *.java`
Aby uruchomić przykład: java -cp bin other_examples.dom.DomBuilder docOK.xml
Programy można edytować w zwykłym edytorze tekstu, np. Vim, XEmacs, Kate.
W labie Eclipse działa i pod Linuxem, i pod Windows. Aby na ćwiczeniach pracować pod Eclipse należy:
Własne programy sugeruję zapisywać w osobnych pakietach.
DOM jest to:
Charakterystyczne dla DOM są następujące rzeczy:
Strona standardu DOM na W3C.
Rekomendacje (wybrane):
API:
org.w3c.dom[.*], javax.xml.parsers.Zobacz także:
Pliki: DomBuilder, DomSimplePrinter.
Program parsuje podany dokument i wypisuje na wyjście jego węzły tekstowe.
Program z przykładu do dostępu do węzłów używa tylko interfejsu Node, jak widać
wystarcza to do odczytania całej zawartości dokumentu.
Można także korzystać z bardziej specyficznych interfejsów jak Document, Element czy Text.
Wówczas mamy do dyspozycji więcej specyficznych metod, jak np. getDocumentElement czy getElementsByTagName,
co może być wygodniejsze.
Pliki: StaffDOM.java, StaffDOM_HighLevel.java.
Program liczy sumę zarobków osób z podanego stanowiska.
W jednej wersji używany jest tylko generyczny interfejs Node,
w drugiej wersji interfejs Element i metoda getElementsByTagName.
Napisz program czytający dokument taki jak sklep.xml i wypisujący wszystkie kategorie zdefiniowane w sklepie, a dla każdej kategorii nazwę i cenę najtańszego towaru w tej kategorii.
Write a program reading documents such as
sklep.xml
which will print all categories and, for each category:
the name (nazwa) and the price (cena)
of the cheapest article (towar) in the given category.
Na dokument XML można patrzeć uwzględniając lub nie przestrzenie nazw.
Standard DOM (od poziomu 2) posiada wsparcie dla przestrzeni nazw.
Między innymi metody, w których wymagane jest podanie nazwy, występują w dwóch
wersjach (z końcówką NS i bez niej).
Jeśli chcemy pracować na dokumencie nie uwzględniając przestrzeni nazw, powinniśmy:
setNamespaceAware(false) (tak na wszelki wypadek, to jest domyślna wartość),NS,getNamespaceURI.Jeśli chcemy pracować na dokumencie uwzględniając przestrzenie nazw, powinniśmy:
setNamespaceAware(true),NS,Nie należy mieszać używania metod z obsługą przestrzeni nazw i bez niej przy dostępie do tego samego drzewa DOM.
Do programu z zadania 1 dodaj obsługę przestrzeni nazw tak, aby program czytał dokumenty takie jak sklep_ns.xml.
Nie trzeba ręcznie wypisywać dokumentów, które są w postaci drzewa DOM. DOM Level 3 zawiera standard Load and Save, który określa interfejs do parsowania i zapisywania dokumentów DOM. Można z niego korzystać w Javie >= 5.0.
Plik: DomLoadSave.
Demonstracja standardu DOM Load and Save. Program parsuje dokument używając
LS, modyfikuje drzewo używając obiektu DomModyfikator (dopisuje atrybuty
mówiące o liczbie dzieci) i zapisuje dokument używając LS.
Do modyfikacji drzewa służą metody setNodeValue, removeChild itp.
Aby dodać nowy węzeł do dokumentu należy:
create... dokumentu (np. createElement),appendChild lub insertBefore nadwęzła.
Na podstawie napisanego programu stwórz program czytający dokument taki jak sklep.xml,
dodający do poszczególnych elementów kategoria podelement
najtanszy-towar z podelementami nazwa i cena, zawierający
właściwe dane i zapisujący zmieniony dokument do nowego pliku.
Nie zawsze dokument chcemy odczytać. Czasami możemy chcieć utworzyć drzewo DOM od zera.
Służy do tego klasa DOMImplementation, którą można uzyskać z DocumentBuilder albo
za pomocą klas pakietu org.w3c.dom.bootstrap.
Najprościej walidować dokument względem jego DTD podczas parsowania.
Walidacja względem XML Schema wymaga niewielkich dodatkowych zabiegów, ale jest też zdefiniowana bardziej ogólnie - można walidować istniejące drzewo DOM.
Validator-em zmienionego dokumentu przed zapisaniem.