Parser dom et génération de jtree

Soyez le premier à donner votre avis sur cette source.

Snippet vu 23 893 fois - Téléchargée 28 fois

Contenu du snippet

Voila un ensemble de classes qui permettent de parser
un document xml avec DOM et de générer un JTree qui le représente

Vous aurez besoin de Xerces : http://xml.apache.org

Source / Exemple :


/******* Classe de lancement et d'affichage ***************/

import java.awt.Dimension;
import java.awt.Toolkit;

import javax.swing.JFrame;
import javax.swing.JScrollPane;

public class AffTree extends JFrame
{
	public AffTree()
	{
		super("Dom Tree");
		setSize(500,500);
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();       
		setLocation((screenSize.width-getWidth())/2,(screenSize.height-getHeight())/2);
		
		
		JScrollPane treeView = new JScrollPane(DomTreeMaker.makeTree("abonnes.xml"));
		getContentPane().add(treeView);
	}
	
	public static void main(String[] args)
	{
		AffTree a = new AffTree();
		a.setVisible(true);
	}
}

/************** Classe pour générer l'arbre ****************/

import javax.swing.JTree;
import javax.swing.tree.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.Vector;

import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
/**

  • @author Duss
*
  • Classe qui renvoit un objet JTree représentant la structure d'un fichier
  • Xml en le parsant avec DOM
  • /
public class DomTreeMaker { public static JTree makeTree(String fileName) { DOMParser parser = new DOMParser(); try { parser.parse(fileName); } catch (SAXException e) { } catch (IOException e) { } Document document = parser.getDocument(); Element database = document.getDocumentElement(); DefaultMutableTreeNode top = new DefaultMutableTreeNode(database.getLocalName()); DefaultMutableTreeNode pNiv = new DefaultMutableTreeNode(database.getFirstChild().getNextSibling().getLocalName()); top.add(pNiv); // On récupère la liste des fils de premier niveau NodeList premNiv = database.getElementsByTagName(database.getFirstChild().getNextSibling().getLocalName()); // Vector pour stocker le nom des fils Vector fils = new Vector(1); // On se positionne sur la première feuille Node pos = ((Element)premNiv.item(0)).getFirstChild().getNextSibling(); // On ajoute le nom au Vector fils.addElement(pos.getLocalName()); // Tant qu'on rencontre des noeuds, on descend de 2 // a chaque fois pour eviter les balises fermantes // et on ajoute au Vector while ((pos = pos.getNextSibling().getNextSibling()) != null) fils.addElement(pos.getLocalName()); DefaultMutableTreeNode tIdent,tFils, tVal, tAttr; // Pour chaque fils de premier niveau for( int i=0; i<premNiv.getLength(); i++ ) { // On récupère les attributs Vector recAttr = DomTools.trouveAttribut((Element)premNiv.item(i),null); HashMap map; String nodeName = ""; for (int l = 0 ; l< recAttr.size() ; l++) { map = (HashMap) recAttr.get(l); nodeName += map.get("nom") + " = " + map.get("valeur"); if (l+1 < recAttr.size()) nodeName += " | "; } // On ajoute l'attribut du fils (l'identifiant) tIdent = new DefaultMutableTreeNode(nodeName); pNiv.add(tIdent); // Puis pour chaque fils for (int j=0 ; j<fils.size() ; j++) { // On recupère la valeur et le type String val = DomTools.findText( (Element)premNiv.item(i),(String)fils.get(j) ); Vector attribs = DomTools.trouveAttribut((Element)premNiv.item(i),(String)fils.get(j)); tFils = new DefaultMutableTreeNode(fils.get(j)); tIdent.add(tFils); DefaultMutableTreeNode attr = new DefaultMutableTreeNode("Attributs"); tFils.add(attr); // Ajout des attributs for (int k = 0 ; k < attribs.size() ; k++) { map = (HashMap)attribs.get(k); tAttr = new DefaultMutableTreeNode(map.get("nom") + " = " + map.get("valeur")); attr.add(tAttr); } // Ajout de la valeur du fils tVal = new DefaultMutableTreeNode(val); tFils.add(tVal); } } final JTree tree = new JTree(top); tree.getSelectionModel().setSelectionMode (TreeSelectionModel.SINGLE_TREE_SELECTION); return tree; } } /************** Classe utilitaires Dom ********************/ import java.util.HashMap; import java.util.Vector; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /**
  • @author Duss
*
  • Outils pour le parser Dom
  • /
public class DomTools { public static String findText( Element element, String name ) { Element elementNom = findFirstElement( element, name ); return findText(elementNom ); } public static String findText(Element element) { return element.getFirstChild().getNodeValue(); } public static Element findFirstElement( Element element, String name ) { NodeList nl = element.getElementsByTagName( name ); if ( nl.getLength() < 1 ) throw new NullPointerException( "Element: "+element+" ne contient pas: "+name); return (Element)nl.item(0); } public static Vector trouveAttribut( Element element, String nom ) { Vector attr = new Vector(1); HashMap map = new HashMap(); Element elementNom = element; if (nom != null) elementNom = findFirstElement( element, nom ); NamedNodeMap attributs = elementNom.getAttributes(); for(int i=0; i<attributs.getLength(); i++) { Node numéro = attributs.item(i); map.put("nom",numéro.getNodeName()); map.put("valeur",numéro.getNodeValue()); attr.addElement(map); } return attr; } public static HashMap trouveAttribut(Node node) { HashMap map = new HashMap(); NamedNodeMap attributs = node.getAttributes(); for(int i=0; i<attributs.getLength(); i++) { Node numéro = attributs.item(i); map.put("nom",numéro.getNodeName()); map.put("valeur",numéro.getNodeValue()); } return map; } }

A voir également

Ajouter un commentaire

Commentaires

karim1758
Messages postés
7
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
4 août 2003
-
J'aimerai savoir ou trouver le "Xerces" parceque lorsque je vais sur le site: http://xml.apache.org il ya seulement du texte. Merci d'avance.
cs_Duss
Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
9 -
voila le chemin complet :
http://xml.apache.org/dist/xerces-j/
Duss
cs_prey
Messages postés
7
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
21 mai 2003
-
Salut,
je vais essayer d'utiliser ton code pour une petite appli que je dois faire en cours.
Mais comme je ne m'y connais pas très bien en Java, peux tu me dire que fichier Xerces je dois installer exactement ?
merci de ton aide.
cs_Duss
Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
9 -
salut,
quand tu as telecharger xerces, il faut inclure le jar dans ton projet (ou le classpath) pour pouvoir l utiliser c est tout
Duss
cs_prey
Messages postés
7
Date d'inscription
lundi 12 mai 2003
Statut
Membre
Dernière intervention
21 mai 2003
-
excuse moi pour ma naiveté, mais quel fichier je dois télécharger, car sur le lien que tu donnes, y'en a plusieurs et je ne sais lequel prendre.
Encore merci.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.