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.