Przykładowe programy (mogą się zmieniać w trakcie kolejnych zajęć):
Zalecam pobranie i rozpakowanie archiwum, pracę w katalogu programy. Własne nowe programy na ćwiczeniach najlepiej tworzyć w osobnym podkatalogu (np. moje), a klasy kompilować też do katalogu class.
Generalnie klasy w Javie powinny być umieszczane w pakietach, jednak dla uproszczenia przykłady są w pakiecie domyślnym, programy pisane na ćwiczeniach też mogą być.
Pod Linuxem można kompilować i uruchamiać programy poleceniami w terminalu.
Aby skompilować programy: javac -d class/ src/*.java lub javac -d class/ moje/MojProgram.java
Aby uruchomić przykład: java -cp class DomBuilder docOK.xml
Programy można edytować w zwykłym edytorze tekstu, np. Vim, XEmacs, Kate.
Eclipse to darmowe środowisko programistyczne dla Javy, napisane w Javie. Poprzez wtyczki funkcjonalność można rozszerzać m.in. o obsługę innych języków programowania i takich standardów jak XML i XML Schema.
W labie Eclipse działa i pod Linuxem, i pod Windows. Aby na ćwiczeniach pracować pod Eclipse należy:
Co prawda w Javie SE 6 jest wszystko, co jest potrzebne do działania przykładów, ale na wszelki wypadek... Do prasowania przydać może się biblioteka Xerces.
Tu dostępne są pliki jar, które należy dopisać do ścieżki CLASSPATH (nie wiem czy koniecznie wszystkie, można poeksperymentować).
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 Element
czy Text
.
Wówczas mamy do dyspozycji więcej specyficznych metod, jak np. getElementsByTagName
czy getWholeText
,
co może być wygodniejsze.
Napisz program (skorzystaj z przykładu) parsujący dokument do postaci DOM i wypisujący na wyjście ten dokument w postaci sformatowanej (większe wcięcia na kolejnych poziomach zagnieżdżenia elementów).
Wystarczy wypisywać elementy z atrybutami i węzły tekstowe, nie należy przejmować się znakami specjalnymi.
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.
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.
Plik: PrintDomImplementations.
Program wypisuje dostępne implementacje DOM. Spróbuj wykonać z różnymi konfiguracjami CLASSPATH.
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.Plik: LiczbyDOM.
Program liczy sumę wartości tych elementów l
, które znajdują się w elementach grupa
o atrybucie wazne
równym tak
.
Na podstawie LiczbyDOM napisz program, który modyfikuje dokument:
do każdej grupy dodaje podelement suma o wartości równej sumie wartości wszystkich elementów
l
zawartych w tej grupie. Zmodyfikowany dokument jest wypisywany na wyjście.
Niech program ten dodatkowo w każdej grupie umieszcza wszystkie elementy l
przed wszystkimi elementami s
.
Napisz program, który (dla dowolnego dokumentu) dodaje do każdego elementu atrybut liczba_potomkow
,
w którym zapisana jest liczba wszystkich węzłów będących potomkami (nie tylko dziećmi) danego elementu.
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
.
Dokumenty można walidować:
Najprościej walidować dokument względem jego DTD. Walidacja względem XML Schema wymaga niewielkich dodatkowych zabiegów.