Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRÉATEUR DE ARBORESCENCE TREENODE À PARTIR DE XML


Information sur la source



Description

Cette classe permet de créer une arborescence que l'on peut pratiquement directement intégrer ensuite dans une JTree lors de sa construction, à partir du contenu d'un fichier xml.
Il est possible de le construire à partir des seuls noms des balises, ou des noms des balises et des attributs ... Regarder les commentaires JAVADOC des défintions des constantes dans la source pour plus de précision.
 

Source

  • /**
  • *
  • */
  • package com.loloof64.classesutilitaires;
  • import java.io.File;
  • import javax.swing.JOptionPane;
  • import javax.swing.tree.DefaultMutableTreeNode;
  • import javax.xml.parsers.DocumentBuilder;
  • import javax.xml.parsers.DocumentBuilderFactory;
  • import org.w3c.dom.Document;
  • import org.w3c.dom.Element;
  • import org.w3c.dom.Node;
  • import org.w3c.dom.NodeList;
  • /**
  • * Classe qui permet de créer une arborescence javax.swing.tree.DefaultMutableTreeNode
  • * (qui dérive javax.swing.tree.TreeNode) à integrer directemement
  • * dans le constructeur de classe implémentant javax.swing.tree.TreeModel, à partir de la
  • * reference java.io.File d'un fichier XML .
  • * <br>Rappel : toute instance de classe implementant TreeModel
  • * (c'est notamment le cas pour javax.swing.tree.DefaultTreeModel)
  • * est directement intégrable dans le constructeur de javax.swing.JTree .
  • * est directement
  • * @author laurent bernabé
  • *
  • */
  • public class CreateurTreeNodeAPArtirDeXML {
  • private File fichier;
  • /*
  • * Les valeurs des modes simples doivent être des puissances de deux :
  • * cela pour permettre la combinaison des différents modes simples .
  • */
  • /*
  • * Modes simples
  • */
  • /**
  • * Dans ce cas-là, seuls les noms des balises seront pris en
  • * compte pour l'affichage .
  • */
  • public final int MODE_BALISES = 1;
  • /**
  • * Dans ce cas-là, seuls les attributs (dont la clé est passée en paramètre de ajouterArborescence) seront pris en compte
  • * pour l'affichage .
  • */
  • public final int MODE_ATTRIBUTS = 2;
  • /**
  • * Affiche les valeurs des balises qui englobent directement
  • * du contenu texte à la place d'autre balise ou de vide en plus
  • * du nom des balises.
  • * N'affiche que les noms des balises sinon .
  • */
  • public final int MODE_BALISES_ET_VALEURS = 4;
  • /*
  • * Modes complexes (résultant de combinaisons de modes simples)
  • */
  • /**
  • * Dans ce cas-là, les balises et les attributs (dont la clé est passée en paramètre de ajouterArborescence) seront prises en compte
  • * pour l'affichage .
  • */
  • public final int MODE_BALISES_ET_ATTRIBUTS = MODE_BALISES + MODE_ATTRIBUTS;
  • /**
  • * Affiche les valeurs des balises qui englobent directement
  • * du contenu texte à la place d'autre balise ou de vide en plus
  • * du nom des balises et des valeurs des attributs précisés en paramètre
  • * de ajouterArborescence.
  • * N'affiche que les noms des balises et des valeurs des attributs précisés en paramètre
  • * de ajouterArborescence sinon .
  • */
  • public final int MODE_BALISES_ET_ATTRIBUTS_ET_VALEURS = MODE_BALISES_ET_VALEURS + MODE_ATTRIBUTS;
  • /**
  • * @return the fichier
  • */
  • public File getFichier() {
  • return fichier;
  • }
  • /**
  • * @param fichier the fichier to set
  • */
  • public void setFichier(File fichier) {
  • this.fichier = fichier;
  • }
  • /**
  • * Ajoute une JTree avec l'arborescence des attributs
  • * du fichier XML dictionnaire inversé passé en paramètre .
  • * Un fichier dictionnaire inversé bien formé a
  • * <ul>
  • * <li> la balise definitions pour racine
  • * <li> des balises lien pour chaque mot de la definition courante
  • * <li> une balise terminaison par définition
  • * <li> les attributs des balises donnent leurs valeurs, et sont valeur
  • * </ul>
  • * @param mode - int - le mode d'ajout :
  • * <ul>
  • * <li> DictionnaireInverse.MODE_BALISES : les noms des balises sont affichés.
  • * <li> DictionnaireInverse.MODE_BALISES_ET_VALEURS : affiche les valeurs des balises qui englobent directement
  • * du contenu texte à la place d'autre balise ou de vide en plus
  • * du nom des balises.
  • * N'affiche que les noms des balises sinon .
  • * <li> DictionnaireInverse.MODE_ATTRIBUTS :
  • * les valeurs des attributs des balises, précisés dans
  • * le paramètre attributs, sont affichées .
  • * <li> DictionnaireInverse.MODE_BALISES_ET_ATTRIBUTS :
  • * les noms des balises et les valeurs des attributs des balises, précisés dans
  • * le paramètre attributs, sont affichées .
  • * <li> DictionnaireInverse.MODE_BALISES_ET_ATTRIBUTS_ET VALEURS :
  • * affiche les valeurs des balises qui englobent directement
  • * du contenu texte à la place d'autre balise ou de vide en plus
  • * du nom des balises et des valeurs des attributs précisés en paramètre
  • * de ajouterArborescence.
  • * N'affiche que les noms des balises et des valeurs des attributs précisés en paramètre
  • * de ajouterArborescence sinon .
  • * </ul>
  • * @param attributs - String[] - les clés d'attribut (pris en compte si
  • * le mode permet la lecture d'attributs) .
  • * @throws IllegalArgumentException - si on autorise la lecture d'attribut et qu'aucun n'est précisé
  • */
  • public DefaultMutableTreeNode obtenirArborescenceDesAttributs(int mode, String[] attributs)
  • throws IllegalArgumentException
  • {
  • /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  • * ATTENTION
  • * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  • * Tous les modes permettant la lecture d'attributs
  • * doivent figurer dans ce test !!!
  • * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  • */
  • if ((mode == MODE_ATTRIBUTS | mode == MODE_BALISES_ET_ATTRIBUTS | mode == MODE_BALISES_ET_ATTRIBUTS_ET_VALEURS)
  • && (attributs == null || attributs.length==0) )
  • throw new IllegalArgumentException("Lecture d'attributs permises et le tableau attributs est nul ou vide !");
  • DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
  • DefaultMutableTreeNode noeudDefinitions = null;
  • try {
  • DocumentBuilder constructeur = fabrique.newDocumentBuilder();
  • Document document = constructeur.parse(fichier);
  • /*
  • * Le document contient un noeud au-dessus de la
  • * première balise du fichier XML. (La super racine
  • * de elemDefinitions n'est pas la super racine du fichier
  • * XML, mais une racine supplémentaire située au-dessus
  • * de cette dernière). Donc, plus bas, je retourne, non
  • * pas elemDefinitions, mais son (premier) fils .
  • */
  • noeudDefinitions = new DefaultMutableTreeNode("Racine");
  • Element elemDefinitions = document.getDocumentElement();
  • ajouterEnfantsDeElementDansNoeud(elemDefinitions, noeudDefinitions, mode, attributs);
  • } catch (IllegalArgumentException e){
  • System.err.println("La référence fichier configurée est null !");
  • e.printStackTrace();
  • JOptionPane.showMessageDialog(null, "La référence fichier configurée est null !", "Erreur ! ", JOptionPane.ERROR_MESSAGE);
  • } catch (Exception e){
  • System.err.println("Erreur dans la lecture du fichier censé être un .xml !");
  • e.printStackTrace();
  • JOptionPane.showMessageDialog(null, "Erreur dans la lecture du fichier censé être un .xml !", "Erreur ! ", JOptionPane.ERROR_MESSAGE);
  • }
  • /*
  • * Pour les raisons précisées ci-haut, c'est le
  • * (premier) fils de elemDefinitions que je retourne .
  • */
  • return (DefaultMutableTreeNode)(noeudDefinitions.getFirstChild());
  • }
  • /**
  • *
  • * @param elem - org.w3c.dom.Element - l'Element du fichier XML
  • * dont on doit extraire les enfants Element .
  • * @param noeud - javax.swing.tree.DefaultMutableTreeNode - le noeud pour Jtree dans
  • * lequel on souhaite fixer la structure obtenue .
  • * @param mode - int - le mode d'ajout .
  • * @param attributs - String[] - les clés d'attribut (prises en compte si
  • * le mode permet la lecture d'attributs) .
  • * @throws IllegalArgumentException - si on autorise la lecture d'attribut et qu'aucun n'est précisé .
  • */
  • private void ajouterEnfantsDeElementDansNoeud (
  • Element elem, DefaultMutableTreeNode noeud, int mode, String[] attributs
  • ) throws IllegalArgumentException
  • {
  • boolean estTerminaison;
  • String chaineRecuperee,chaineRecupereeTemp,chaineRecuperee1;
  • NodeList listeEnfants;
  • //Determine l'état de terminaison ou non du noeud
  • listeEnfants = elem.getChildNodes();
  • if(listeEnfants.getLength()<=1)
  • estTerminaison = true;
  • else
  • estTerminaison = false;
  • //Création du texte du noeud
  • switch (mode){
  • case MODE_BALISES :
  • chaineRecuperee = elem.getNodeName();
  • if(chaineRecuperee == "")
  • chaineRecuperee = "non/mal défini ";
  • break;
  • /*
  • * Note : si l'attribut est unique,
  • * le texte "(attribut <attribut>)"
  • * ne sera pas affiché .
  • */
  • case MODE_ATTRIBUTS :
  • if (attributs == null || attributs.length == 0)
  • throw new IllegalArgumentException("Lecture d'attributs permises et le tableau attributs est nul ou vide !");
  • chaineRecuperee = "";
  • for (int i = 0; i < attributs.length; i++){
  • chaineRecupereeTemp = elem.getAttribute(attributs[i]);
  • if(chaineRecupereeTemp == "")
  • chaineRecuperee += "non ou mal défini" +((attributs.length>1)?"(attribut "+ attributs[i]+")":"");
  • else
  • chaineRecuperee += chaineRecupereeTemp+((attributs.length>1)?"(attribut "+ attributs[i]+")":"");
  • }
  • break;
  • /*
  • * Affiche les valeurs des balises qui englobent directement
  • * du contenu texte à la place d'autre balise ou de vide en plus
  • * du nom des balises.
  • * N'affiche que les noms des balises sinon .
  • */
  • case MODE_BALISES_ET_VALEURS :
  • chaineRecuperee = elem.getNodeName();
  • if(chaineRecuperee == "")
  • chaineRecuperee = "non/mal défini";
  • if(estTerminaison){
  • chaineRecuperee += " (balise) : "+elem.getTextContent()+" (valeur)";
  • }
  • break;
  • case MODE_BALISES_ET_ATTRIBUTS :
  • chaineRecuperee = "";
  • if (attributs == null || attributs.length == 0)
  • throw new IllegalArgumentException("Lecture d'attributs permises et le tableau attributs est nul !");
  • chaineRecuperee1 = elem.getNodeName();
  • if(chaineRecuperee1 == ""){
  • chaineRecuperee = "non/mal défini (balise)";
  • }
  • else {
  • chaineRecuperee = chaineRecuperee1+" (balise)";
  • }
  • //attributs
  • for (int i = 0; i < attributs.length; i++){
  • chaineRecupereeTemp = elem.getAttribute(attributs[i]);
  • if(chaineRecupereeTemp == "")
  • chaineRecuperee += " : non ou mal défini (attribut "+ attributs[i]+")";
  • else
  • chaineRecuperee += " : "+chaineRecupereeTemp+" (attribut "+attributs[i]+")";
  • }
  • break;
  • /*
  • * Affiche les valeurs des balises qui englobent directement
  • * du contenu texte à la place d'autre balise ou de vide en plus
  • * du nom des balises et des valeurs des attributs précisés en paramètre
  • * de ajouterArborescence.
  • * N'affiche que les noms des balises et des valeurs des attributs précisés en paramètre
  • * de ajouterArborescence sinon .
  • */
  • case MODE_BALISES_ET_ATTRIBUTS_ET_VALEURS :
  • chaineRecuperee = "";
  • if (attributs == null || attributs.length == 0)
  • throw new IllegalArgumentException("Lecture d'attributs permises et le tableau attributs est nul !");
  • chaineRecuperee1 = elem.getNodeName();
  • if(chaineRecuperee1 == ""){
  • chaineRecuperee = "non/mal défini (balise)";
  • }
  • else {
  • chaineRecuperee = chaineRecuperee1+" (balise)";
  • }
  • //attributs
  • for (int i = 0; i < attributs.length; i++){
  • chaineRecupereeTemp = elem.getAttribute(attributs[i]);
  • if(chaineRecupereeTemp == "")
  • chaineRecuperee += " : non ou mal défini (attribut "+ attributs[i]+")";
  • else
  • chaineRecuperee += " : "+chaineRecupereeTemp+" (attribut "+attributs[i]+")";
  • }
  • //valeurs
  • if (estTerminaison) {
  • chaineRecuperee += " : " + elem.getTextContent() + "(valeur)";
  • }
  • break;
  • default :
  • chaineRecuperee = "Erreur : mode de lecture mal défini !";
  • }
  • //Enregistrement des enfants du noeud
  • DefaultMutableTreeNode noeudInterne = new DefaultMutableTreeNode(chaineRecuperee);
  • if(estTerminaison){
  • noeudInterne.setAllowsChildren(false);
  • }
  • else{
  • noeudInterne.setAllowsChildren(true);
  • for(int i = 0; i < listeEnfants.getLength(); i++) {
  • if (listeEnfants.item(i).getNodeType() == Node.ELEMENT_NODE) {
  • ajouterEnfantsDeElementDansNoeud((Element) (listeEnfants
  • .item(i)), noeudInterne, mode, attributs);
  • }
  • }
  • }
  • noeud.add(noeudInterne);
  • }
  • }
/**
 * 
 */
package com.loloof64.classesutilitaires;

import java.io.File;

import javax.swing.JOptionPane;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * Classe qui permet de créer une arborescence javax.swing.tree.DefaultMutableTreeNode
 * (qui dérive javax.swing.tree.TreeNode) à integrer directemement
 * dans le constructeur de classe implémentant javax.swing.tree.TreeModel, à partir de la
 * reference java.io.File d'un fichier XML . 
 * <br>Rappel : toute instance de classe implementant TreeModel 
 * (c'est notamment le cas pour javax.swing.tree.DefaultTreeModel)
 * est directement intégrable dans le constructeur de javax.swing.JTree .
 * est  directement 
 * @author laurent bernabé
 *
 */
public class CreateurTreeNodeAPArtirDeXML {

	private File fichier;
	
	/*
	 * Les valeurs des modes simples doivent être des puissances de deux :
	 * cela pour permettre la combinaison des différents modes simples .
	 */
	
	
	/*
	 * Modes simples
	 */
	
	/**
	 * Dans ce cas-là, seuls les noms des balises seront pris en
	 * compte pour l'affichage .
	 */
	public final int MODE_BALISES = 1;
	
	/**
	 * Dans ce cas-là, seuls les attributs (dont la clé est passée en paramètre de ajouterArborescence) seront pris en compte
	 * pour l'affichage .
	 */
	public final int MODE_ATTRIBUTS = 2;
	
	/**
	 * Affiche les valeurs des balises qui englobent directement
	 * du contenu texte à la place d'autre balise ou de vide en plus
	 * du nom des balises.
	 * N'affiche que les noms des balises sinon .
	 */
	public final int MODE_BALISES_ET_VALEURS = 4;
	
	/*
	 * Modes complexes (résultant de combinaisons de modes simples)
	 */
	
	/**
	 * Dans ce cas-là, les balises et les attributs (dont la clé est passée en paramètre de ajouterArborescence) seront prises en compte
	 * pour l'affichage . 
	 */
	public final int MODE_BALISES_ET_ATTRIBUTS = MODE_BALISES + MODE_ATTRIBUTS;
	
	/**
	 * Affiche les valeurs des balises qui englobent directement
	 * du contenu texte à la place d'autre balise ou de vide en plus
	 * du nom des balises et des valeurs des attributs précisés en paramètre
	 * de ajouterArborescence.
	 * N'affiche que les noms des balises et des valeurs des attributs précisés en paramètre
	 * de ajouterArborescence sinon .
	 */
	public final int MODE_BALISES_ET_ATTRIBUTS_ET_VALEURS = MODE_BALISES_ET_VALEURS + MODE_ATTRIBUTS;
	
	
	
	/**
	 * @return the fichier
	 */
	public File getFichier() {
		return fichier;
	}

	/**
	 * @param fichier the fichier to set
	 */
	public void setFichier(File fichier) {
		this.fichier = fichier;
	}

	/**
	 * Ajoute une JTree avec l'arborescence des attributs
	 * du fichier XML dictionnaire inversé passé en paramètre .
	 * Un fichier dictionnaire inversé bien formé a
	 * <ul>
	 * <li> la balise definitions pour racine
	 * <li> des balises lien pour chaque mot de la definition courante
	 * <li> une balise terminaison par définition
	 * <li> les attributs des balises donnent leurs valeurs, et sont valeur
	 * </ul>
	 * @param mode - int - le mode d'ajout :
	 * <ul>
	 * <li> DictionnaireInverse.MODE_BALISES : les noms des balises sont affichés.
	 * <li> DictionnaireInverse.MODE_BALISES_ET_VALEURS : affiche les valeurs des balises qui englobent directement
	 * du contenu texte à la place d'autre balise ou de vide en plus
	 * du nom des balises.
	 * N'affiche que les noms des balises sinon .
	 * <li> DictionnaireInverse.MODE_ATTRIBUTS : 
	 * les valeurs des attributs des balises, précisés dans 
	 * le paramètre attributs, sont affichées .
	 * <li> DictionnaireInverse.MODE_BALISES_ET_ATTRIBUTS : 
	 * les noms des balises et les valeurs des attributs des balises, précisés dans 
	 * le paramètre attributs, sont affichées .
	 * <li> DictionnaireInverse.MODE_BALISES_ET_ATTRIBUTS_ET VALEURS :
	 * affiche les valeurs des balises qui englobent directement
	 * du contenu texte à la place d'autre balise ou de vide en plus
	 * du nom des balises et des valeurs des attributs précisés en paramètre
	 * de ajouterArborescence.
	 * N'affiche que les noms des balises et des valeurs des attributs précisés en paramètre
	 * de ajouterArborescence sinon .
	 * </ul>
	 * @param attributs - String[] - les clés d'attribut (pris en compte si
	 * le mode permet la lecture d'attributs) .
	 * @throws IllegalArgumentException - si on autorise la lecture d'attribut et qu'aucun n'est précisé
	 */
	public DefaultMutableTreeNode obtenirArborescenceDesAttributs(int mode, String[] attributs)
	throws IllegalArgumentException
	{
		/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		 *                  ATTENTION 
		 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		 * Tous les modes permettant la lecture d'attributs
		 * doivent figurer dans ce test !!!
		 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		 */
		if ((mode == MODE_ATTRIBUTS | mode == MODE_BALISES_ET_ATTRIBUTS | mode == MODE_BALISES_ET_ATTRIBUTS_ET_VALEURS)
			&& (attributs == null || attributs.length==0) )
			throw new IllegalArgumentException("Lecture d'attributs permises et le tableau attributs est nul ou vide !");
		DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
		DefaultMutableTreeNode noeudDefinitions = null;
		try {
			DocumentBuilder constructeur = fabrique.newDocumentBuilder();
			Document document = constructeur.parse(fichier);
			
			/*
			 * Le document contient un noeud au-dessus de la 
			 * première balise du fichier XML. (La super racine
			 * de elemDefinitions n'est pas la super racine du fichier
			 * XML, mais une racine supplémentaire située au-dessus
			 * de cette dernière). Donc, plus bas, je retourne, non
			 * pas elemDefinitions, mais son (premier) fils .
			 */
			noeudDefinitions = new DefaultMutableTreeNode("Racine");
			Element elemDefinitions = document.getDocumentElement();
			
			ajouterEnfantsDeElementDansNoeud(elemDefinitions, noeudDefinitions, mode, attributs);
			
		} catch (IllegalArgumentException e){
			System.err.println("La référence fichier configurée est null !");
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "La référence fichier configurée est null !", "Erreur ! ", JOptionPane.ERROR_MESSAGE);
		} catch (Exception e){
			System.err.println("Erreur dans la lecture du fichier censé être un .xml !");
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, "Erreur dans la lecture du fichier censé être un .xml !", "Erreur ! ", JOptionPane.ERROR_MESSAGE);
		}
		/* 
		 * Pour les raisons précisées ci-haut, c'est le 
		 * (premier) fils de elemDefinitions que je retourne . 
		 */
		return (DefaultMutableTreeNode)(noeudDefinitions.getFirstChild());
	}
	
	/**
	 * 
	 * @param elem - org.w3c.dom.Element - l'Element du fichier XML
	 * dont on doit extraire les enfants Element .
	 * @param noeud - javax.swing.tree.DefaultMutableTreeNode - le noeud pour Jtree dans
	 * lequel on souhaite fixer la structure obtenue .
	 * @param mode - int - le mode d'ajout .
	 * @param attributs - String[] - les clés d'attribut (prises en compte si
	 * le mode permet la lecture d'attributs) .
	 * @throws IllegalArgumentException - si on autorise la lecture d'attribut et qu'aucun n'est précisé .
	 */
	private void ajouterEnfantsDeElementDansNoeud (
	     Element elem, DefaultMutableTreeNode noeud, int mode, String[] attributs
	   ) throws IllegalArgumentException
	{
		boolean estTerminaison;
		String chaineRecuperee,chaineRecupereeTemp,chaineRecuperee1;
		NodeList listeEnfants;
		
		
		//Determine l'état de terminaison ou non du noeud
		listeEnfants = elem.getChildNodes();
		if(listeEnfants.getLength()<=1)
			estTerminaison = true;	
		else
			estTerminaison = false;
		
		//Création du texte du noeud
		switch (mode){
		case MODE_BALISES :
			chaineRecuperee = elem.getNodeName();
			if(chaineRecuperee == "") 
				chaineRecuperee = "non/mal défini ";
			break;
		/*
		 * Note : si l'attribut est unique,
		 *  le texte "(attribut <attribut>)"
		 *  ne sera pas affiché .
		 */
		case MODE_ATTRIBUTS :
			if (attributs == null || attributs.length == 0)
				throw new IllegalArgumentException("Lecture d'attributs permises et le tableau attributs est nul ou vide !");
			chaineRecuperee = "";
			for (int i = 0; i < attributs.length; i++){
				chaineRecupereeTemp = elem.getAttribute(attributs[i]);
				if(chaineRecupereeTemp == "")
					chaineRecuperee += "non ou mal défini" +((attributs.length>1)?"(attribut "+ attributs[i]+")":"");
				else
					chaineRecuperee += chaineRecupereeTemp+((attributs.length>1)?"(attribut "+ attributs[i]+")":"");
				
			}	
			break;
		
		/*
		 * Affiche les valeurs des balises qui englobent directement
		 * du contenu texte à la place d'autre balise ou de vide en plus
		 * du nom des balises.
		 * N'affiche que les noms des balises sinon .
		 */
		case MODE_BALISES_ET_VALEURS :
			chaineRecuperee = elem.getNodeName();
			if(chaineRecuperee == "")
				chaineRecuperee = "non/mal défini";
			if(estTerminaison){
				chaineRecuperee += " (balise) : "+elem.getTextContent()+" (valeur)"; 
			}
			break;
		case MODE_BALISES_ET_ATTRIBUTS :
			chaineRecuperee = "";
			if (attributs == null || attributs.length == 0)
				throw new IllegalArgumentException("Lecture d'attributs permises et le tableau attributs est nul !");
			chaineRecuperee1 = elem.getNodeName();
			if(chaineRecuperee1 == ""){ 
				chaineRecuperee = "non/mal défini (balise)";
			}
			else {
				chaineRecuperee = chaineRecuperee1+" (balise)";
			}
			//attributs
			for (int i = 0; i < attributs.length; i++){
				chaineRecupereeTemp = elem.getAttribute(attributs[i]);
				if(chaineRecupereeTemp == "")
					chaineRecuperee += " : non ou mal défini (attribut "+ attributs[i]+")";
				else
					chaineRecuperee += " : "+chaineRecupereeTemp+" (attribut "+attributs[i]+")";
				
			}	
			break;
			
		/*
		 * Affiche les valeurs des balises qui englobent directement
		 * du contenu texte à la place d'autre balise ou de vide en plus
		 * du nom des balises et des valeurs des attributs précisés en paramètre
		 * de ajouterArborescence.
		 * N'affiche que les noms des balises et des valeurs des attributs précisés en paramètre
		 * de ajouterArborescence sinon .
		 */
		case MODE_BALISES_ET_ATTRIBUTS_ET_VALEURS :
			chaineRecuperee = "";
			if (attributs == null || attributs.length == 0)
				throw new IllegalArgumentException("Lecture d'attributs permises et le tableau attributs est nul !");
			chaineRecuperee1 = elem.getNodeName();
			if(chaineRecuperee1 == ""){ 
				chaineRecuperee = "non/mal défini (balise)";
			}
			else {
				chaineRecuperee = chaineRecuperee1+" (balise)";
			}
			//attributs
			for (int i = 0; i < attributs.length; i++){
				chaineRecupereeTemp = elem.getAttribute(attributs[i]);
				if(chaineRecupereeTemp == "")
					chaineRecuperee += " : non ou mal défini (attribut "+ attributs[i]+")";
				else
					chaineRecuperee += " : "+chaineRecupereeTemp+" (attribut "+attributs[i]+")";
				
			}
			//valeurs
			if (estTerminaison) {
				chaineRecuperee += " : " + elem.getTextContent() + "(valeur)";
			}			
				break;
		default :
			chaineRecuperee = "Erreur : mode de lecture mal défini !";
		}
		
		//Enregistrement des enfants du noeud
		DefaultMutableTreeNode noeudInterne = new DefaultMutableTreeNode(chaineRecuperee);
		if(estTerminaison){
			noeudInterne.setAllowsChildren(false);
		}		
		else{
			noeudInterne.setAllowsChildren(true);
		    for(int i = 0; i < listeEnfants.getLength(); i++) {
				if (listeEnfants.item(i).getNodeType() == Node.ELEMENT_NODE) {
					ajouterEnfantsDeElementDansNoeud((Element) (listeEnfants
							.item(i)), noeudInterne, mode, attributs);
				}				
			}

		}
			noeud.add(noeudInterne);
	}

	
}

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de nadjet24 le 14/04/2008 19:41:58

bonjour j'ai utiliser votre programme c'est bien structuré merci.Mais j'ai un problème quand je l'éxécute il ya une erreur s'affiche "project does not a main class set".car mon objectif c'est d'avoir un fichier xml en entrée et avoir son arboressence en sortie .Je n'ai pas bien saisis votre description Cette classe permet de créer une arborescence que l'on peut pratiquement directement intégrer ensuite dans une JTree lors de sa construction, à partir du contenu d'un fichier xml.Et g'ignore où exactement je peux intergrer votre programme merci d'avantage.

signaler à un administrateur
Commentaire de loloof64 le 15/04/2008 08:40:10

Bonjour Nadjet24 : désolé pour le retard . Et merci pour le compliment.

Tu as eu cette erreur parce que la machine virtuelle Java (ou plus souvent appellée Java Virtual Machine) recherche une fonction, dans l'ensemble de tes classes, dont la signature est

public static void main(String args[]){}.

C'est la fonction la plus importante .

signaler à un administrateur
Commentaire de loloof64 le 15/04/2008 08:49:42

Tu peux aussi regarder une source où j'utilise cette classe, elle est aussi organisée en packages (la classe qui contient le main est com.loloof64.dictionnaireinverse.DictionnaireInverse, elle dérive aussi directement la classe fenêtre javax.swing.JFrame) .
http://www.javafr.com/codes/DICTIONNAIRE-INVERSE-ARBORESCENCE-JTREE-XML_44657.aspx


N'hésites pas à me demander des précisions :) .

signaler à un administrateur
Commentaire de loloof64 le 15/04/2008 09:10:37

public void static main(String args[]){
Jframe fenetre = ... ;
//affichera que les noms des balises du fichier XML
int mode = CreateurTreNodeAPArtirDeXML.MODE_BALISE;

createurArbre = new CreateurTreeNodeAPartirDeXML();
createurArbre.setFichier(new File("C:\\Documents and Settings\\Utilisateur\\Bureau\\FichierALire.xml"));
DefaultMutableTreeNode arbre = createurArbre.obtenirArborescenceDesAttributs(mode,null));
fenetre.add(new JTree(arbre));

//et attention à la gestion des exceptions !

signaler à un administrateur
Commentaire de nadjet24 le 16/04/2008 12:39:25

Mercie pour votre aide j'ai utiliser votre code concernant le dictionnaire inverse d'arboressence mais il ya une erreur qui s'affiche  concernant le package javax.swing dans la classe DinctionnaireInverse je souhaite telecharger le package je n'arrive pas à le retrouver merci d'avantage.

signaler à un administrateur
Commentaire de loloof64 le 16/04/2008 13:11:13

Bonjour Nadjet : tu as quelle version de Java ?
L'idéal serait que tu télécharges la version 6 sur le site officiel de Sun : le package javax.swing est automatiquement distribué avec, et il y a des simplicités de langage comme la programmation générique par exemple (dont tu as peut-être eu un aperçu si jamais tu as déjà programmé en C++) .

Moi aussi avant je ne pouvais programmer avec javax.swing car il ne figurait pas dans ma version de Java (j'avais alors la version 1.1.2) .

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

créer un fichier excel à partir d'un fichier xml [ par Tara ] Bonjour à tous !Mon problème se résume dans le sujet à savoir : comment puis-je créer un fichier excel à partir d'un fichier xml ?Faut-il que je passe [JTree] Poblème de Copier/Coller [ par breed1200 ] Salut à tous!Je fais un soft avec un JTree composé de DefaultMutableTreeNode qui contiennent des Objets persos. J'ai implémenté le Drag n drop sans so xml à partir d'une requete [ par loy_822 ] bonjour, voila mon problème :je suis en train de faire un explorateur avec un JTree qui représente tous les répertoires et sous-répertoires de ma base Générer un fichier XML [ par Tara ] Salut à tous !Je ne connais pas du tout le XML mais il me faudrait créer un fichier XML dans lequel je présenterais des données extraites à l'aide d Créer un fichier xml [ par Tara ] Merci pour les deux réponses que j'ai reçues. Mais j'ai tout de même vu que l'on pouvait écrire directement du xml à l'aide de DOM (et J... je ne sais renommer une DefaultMutableTreeNode dans un JTree [ par ratonlarvor ] ratonlarvor :Bonjour, Je voudrais renommer une DefaultMutableTreeNode dans mon JTree mais je ne connait pas la méthode.Quelqu'un saurait t'il comment URGENT : problème de sélection dans un JTree [ par terminagroo ] Bonjour,Voil&#224; j'ai cr&#233;&#233; une arborescence de fichiers qui fonctionne plut&#244;t bien (un JTree). Mais mon probl&#232;me est que lorsque JTree Applet probleme [ par fredspv ] Bonjour,Je teste actuellement un JTree dans un Applet hors mon JTree ne s'affiche pas entierement pourquoi ?Voici le code:import java.awt.*;import jav Operation sur JTree [ par alonsyl ] bonjour,dans le constructeur d'une JFrame, j'ai construis un JTree de la maniere suivante :DefaultMutableTreeNode code6 =&nbsp;< construire un JTree grace a un fichier XML [ par julwoko ] voila Je suis d&#233;butant en JTree et XML et j'aimerai avoir quelque conseil ou si des personne l'avait deja fait ... J'ai un fichier xml de se ge


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.