Ciao a tutti sto realizzando un'applicazione che dato un file xml in ingresso, me lo visualizza sottoforma di albero jtree. Posto anche un'immagine di quello che sono riuscito a realizzare.
Il problema č il seguente: come faccio a inserire nello jtree anche quegli attributi inseriti tra i tag?
Mi spiego meglio:
dallo screen (collegamento in basso) si vede il tag
<item id="21-Lug">
....
...
</item>
ed io non riesco ad inserire anche l'attributo id con relativo valore nello jtree associato.
Qualcuno sā come si fā?
Ecco il codice: il metodo e la classe che implementa TreeModel con l'override dei metodi che mi interessavano.
Grazie in anticipo
codice:public void createXMLTree (File xml) { try { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(xml); doc.getDocumentElement().normalize(); Node root = doc.getDocumentElement(); XmlTreeModel model = new XmlTreeModel(root); tree.setModel(model); tree.setVisible(true); } catch (Exception e) { e.printStackTrace(); } }
http://www.zshare.net/image/66098282c1663303/codice:class XmlTreeModel implements TreeModel { protected Node root; public XmlTreeModel(Node root){ this.root = root; } // Adds a listener for the TreeModelEvent posted after the tree changes. @Override public void addTreeModelListener(TreeModelListener arg0) { // TODO Auto-generated method stub } // Returns the child of parent at index index in the parent's child array. @Override public Object getChild(Object parent, int index) { Node child = ((Node)parent).getChildNodes().item(index); return (Object)child; } // Returns the number of children of parent. @Override public int getChildCount(Object parent) { return ((Node)parent).getChildNodes().getLength(); } // Returns the index of child in parent. @Override public int getIndexOfChild(Object parent, Object child) { NodeList childs = ((Node)parent).getChildNodes(); if (childs.getLength() == 0) { return -1; } else { for (int i=0; i<childs.getLength(); i++){ if (childs.item(i) == (Node)child) return i; } return -1; } } // Returns the root of the tree. @Override public Object getRoot() { return (Object)this.root; } @Override // Returns true if node is a leaf. public boolean isLeaf(Object node) { // org.w3c.dom.Node.ELEMENT_NODE corrisponde al valore 7 // org.w3c.dom.Node.ATTRIBUTE_NODE corrisponde al valore 1 if ((((Node)node).getNodeType()==org.w3c.dom.Node.ELEMENT_NODE ) || (((Node)node).getNodeType()==org.w3c.dom.Node.ATTRIBUTE_NODE )) { return false; } else { return true; } } // Removes a listener previously added with addTreeModelListener. @Override public void removeTreeModelListener(TreeModelListener arg0) { // TODO Auto-generated method stub } // @Override public void valueForPathChanged(TreePath arg0, Object arg1) { // TODO Auto-generated method stub } }

Rispondi quotando