CATEGORII DOCUMENTE |
DOCUMENTE SIMILARE |
|||||
|
|||||
CDC 540 SDS 495
public static final short ELEMENT_NODE = 1;
public static final short ATTRIBUTE_NODE = 2;
public static final short TEXT_NODE = 3;
Nodurile cu text au toate acelasi nume ("#text"), iar valoarea este sirul de caractere ce reprezinta textul. In exemplul anterior cele 4 noduri terminale sunt noduri text (cu valorile "CDC","540","SDS","495"). Parserul DOM creeaza noduri text si pentru grupuri de spatii albe (blancuri sau terminator de linie inainte sau dupa un marcaj). Pentru fisierul XML cu 10 linii si indentare numarul de noduri din arborele DOM este 20 : 1 pe nivelul 1, 5 pe nivelul 2, 10 pe nivelul 3 si 4 pe nivelul 4. Dintre aceste noduri sunt 9 noduri text cu spatii albe (3 pe nivelul 2 si 6 pe nivelul 3).
Nodurile pentru elemente au numele marcajului si valoarea null. In arborele de mai sus am scris numele nodurilor de pe primele 3 niveluri (de tip 1) si valorile nodurilor de pe ultimul nivel (de tip 3).
- Interfata Node contine metode de acces la un nod de arbore DOM si la succesorii sai, dar si metode pentru crearea si modificarea de noduri de arbore DOM. Exemple:
public String getNodeName(); // numele acestui nod
public String getNodeValue() throws DOMException; // valoarea acestui nod
public void setNodeValue(String nodeValue) throws DOMException;
public short getNodeType(); // tipul acestui nod
public NodeList getChildNodes(); // lista succesorilor acestui nod
public Node getFirstChild(); // primul succesor al acestui nod
public Node getNextSibling(); // urmatorul succesor al acestui nod
public Node item(int index); // nodul cu numarul "index"
public int getLength(); // lungime lista de noduri
- Interfetele Document, Element, Attr, CharacterData, Text, Comment, extind direct sau indirect interfata Node cu metode specifice acestor tipuri de noduri.
Clasele care implementeaza aceste interfete fac parte din parserul DOM, iar numele si implementarea lor nu sunt cunoscute utilizatorilor; ele constituie un bun exemplu de separare a interfetei de implementare si de programare la nivel de interfata. Clasa care implementeaza interfata Node (si extinde implicit clasa Object) contine si o metoda "toString", cu numele si valoarea nodului intre paranteze.
Afisarea sau prelucrarea unui arbore DOM se face de obicei printr-o functie statica recursiva care prelucreaza nodul curent (primit ca argument) si apoi se apeleaza pe ea insasi pentru fiecare succesor. Parcurgerea listei de succesori se poate face in doua moduri:
- Folosind metodele "getFirstChild" si "getNextSibling" ;
- Folosind metoda "getChildNodes" si metode ale interfetei NodeList.
Exemplu pentru prima solutie a functiei recursive:
public static void printNode(Node node)
}
Exemplu pentru a doua solutie a functiei recursive:
public static void printNode(Node node)
Daca operatiile efectuate la fiecare nod depind de tipul nodului, atunci functia recursiva va contine o selectie dupa tipul nodului (un bloc switch).
Metoda "parse" are ca rezultat un obiect de tip Document, care este arborele creat pe baza documentului XML, conform modelului DOM.
Exemplul urmator foloseste o functie recursiva pentru afisarea tuturor nodurilor dintr-un arbore DOM (cu nume si valoare), pornind de la radacina.
import javax.xml.parsers.*;
import java.io.*;
import org.w3c.dom.*;
// afisare nume si valori noduri din arbore DOM (Java 1.4)
class DomEcho
}
public static void main (String arg[]) throws Exception
}
Pentru afisarea unui arbore DOM sub forma unui arbore JTree se poate crea un arbore Swing cu datele din arborele DOM, sau se poate stabili o corespondenta nod la nod intre cei doi arbori sau se poate folosi o clasa adaptor.
Clasa adaptor primeste apeluri de metode din interfata TreeeModel si le transforma in apeluri de metode din interfata Node (DOM) . Exemplu:
class NodeAdapter implements TreeNode
public String toString()
public int getIndex(TreeNode child)
return -1; // nu ar trebui sa se ajunga aici.
}
public TreeNode getChildAt(int i)
public int getChildCount()
public TreeNode getParent()
public boolean isLeaf()
public boolean getAllowsChildren()
public Enumeration children ()
}
Clasa enumerator putea fi si o clasa inclusa anonima:
class CEnum implements Enumeration
public Object nextElement ()
public boolean hasMoreElements ()
}
}
Utilizarea clasei adaptor se va face astfel:
public static void main(String argv[ ]) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse( new File(argv[0]) );
JFrame frame = new JFrame(argv[0]);
JTree tree = new JTree(new DefaultTreeModel(new NodeAdapter(doc)));
frame.getContentPane().add ( new JScrollPane(tree) );
frame.setSize(500,480); frame.setVisible(true);
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 12292
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved