IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XQUERY/SGBD XML Discussion :

Construction d'un arbre à partir d'un fichier xml


Sujet :

XQUERY/SGBD XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 204
    Points : 64
    Points
    64
    Par défaut Construction d'un arbre à partir d'un fichier xml
    Bonjour à tous,

    J'ai à ma charge de générer un arbre à partir d'un fichier xml je cherche une Api qui permet de faire ça en java bien sur

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    un arbre comment, un résineux, à feuilles caduques, pas caduques, qui donne des fruits... ?

    Il faudrait être un peu plus précis que cela.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 204
    Points : 64
    Points
    64
    Par défaut
    Ok,

    En fait moi j'ai un fichier xml comme ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <?xml version="1.0" encoding="utf-8" ?> 
    - <organisation edition="Organisation de la fiche technique">
    - <niveau id="" libelle="Identification véhicule">
      <niveau id="" libelle="Plaques constructeur" codesource="FT01" /> 
      <niveau id="" libelle="Code peinture" codesource="FT02" /> 
      <niveau id="" libelle="Points de levage" codesource="FT03" /> 
      <niveau id="" libelle="Points de remorquage" codesource="FT42" /> 
      </niveau>
    - <niveau id="" libelle="Moteur">
      <niveau id="" libelle="Généralités" codesource="FT04" /> 
      <niveau id="" libelle="Lubrifiants" codesource="FT05" /> 
      <niveau id="" libelle="Culasse" codesource="FT06" /> 
      <niveau id="" libelle="Courroies" codesource="FT07" /> 
      <niveau id="" libelle="Couples de serrage" codesource="FT43" /> 
      <niveau id="" libelle="Bougies" codesource="FT08" /> 
      </niveau>
      <niveau id="" libelle="Gestion moteur" codesource="FT09" /> 
      <niveau id="" libelle="Equipement électrique" codesource="FT10" /> 
    - <niveau id="" libelle="Suspension / géométrie des trains">
      <niveau id="" libelle="Conditions de réglage" codesource="FT11" /> 
      <niveau id="" libelle="Hauteur" codesource="FT12" /> 
      <niveau id="" libelle="Géométrie avant" codesource="FT13" /> 
      <niveau id="" libelle="Géométrie arrière" codesource="FT14" /> 
      <niveau id="" libelle="Couples de serrage" codesource="FT15" /> 
      </niveau>
      <niveau id="" libelle="Roues / pneus" codesource="FT16" /> 
    - <niveau id="" libelle="Freinage">
      <niveau id="" libelle="Généralités" codesource="FT17" /> 
      <niveau id="" libelle="Frein de stationnement" codesource="FT18" /> 
      <niveau id="" libelle="Freins avant (à disques ou tambours)" codesource="FT19" /> 
      <niveau id="" libelle="Freins arrière (à disques ou tambours)" codesource="FT20" /> 
      <niveau id="" libelle="ABS/ESP" codesource="FT21" /> 
      <niveau id="" libelle="Couples de serrage" codesource="FT22" /> 
      <niveau id="" libelle="Lubrifiants - ingrédients" codesource="FT23" /> 
      </niveau>
    - <niveau id="" libelle="Climatisation">
      <niveau id="" libelle="Implantation des valves" codesource="FT24" /> 
      <niveau id="" libelle="Courroie compresseur" codesource="FT25" /> 
      <niveau id="" libelle="Lubrifiants - ingrédients" codesource="FT26" /> 
      </niveau>
    - <niveau id="" libelle="Lubrifiants - ingrédients">
      <niveau id="" libelle="Moteur (E ou D)" codesource="FT27" /> 
      <niveau id="" libelle="BV (M ou A)" codesource="FT28" /> 
      <niveau id="" libelle="Transmission" codesource="FT29" /> 
      <niveau id="" libelle="Embrayage" codesource="FT30" /> 
      <niveau id="" libelle="Direction" codesource="FT31" /> 
      <niveau id="" libelle="Suspension" codesource="FT32" /> 
      <niveau id="" libelle="Climatisation" codesource="FT33" /> 
      <niveau id="" libelle="Freinage" codesource="FT34" /> 
      </niveau>
    - <niveau id="" libelle="Couples de serrage">
      <niveau id="" libelle="Roues" codesource="FT35" /> 
      <niveau id="" libelle="Freins" codesource="FT36" /> 
      <niveau id="" libelle="Suspension" codesource="FT37" /> 
      <niveau id="" libelle="Transmission" codesource="FT38" /> 
      <niveau id="" libelle="Moteur (E ou D)" codesource="FT39" /> 
      <niveau id="" libelle="Direction" codesource="FT40" /> 
      <niveau id="" libelle="Airbag" codesource="FT41" /> 
      </niveau>
      </organisation>
    à partir de ce fichier je vais pouvoir créer un arbre comme :


    -Organisation de la fiche technique
    -Identification véhicule
    -Plaques constructeur
    -Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    -Xxxxxxxxxxxxxxxxxxxxxxxxx

    voilà une idée sur l'arbre à créer

  4. #4
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    pourrais tu nous donner un exemple de fichier d'entrée (bon à priori on en a un) et un de sortie, car ton fichier d'entrée est déjà un arbre pour moi

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 204
    Points : 64
    Points
    64
    Par défaut
    Le fichier de sortie est un arbre construite avec Xquery et xPath, je te file le fichier .xqy

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    (: ********************** 
    Construction du tree
    ************************:)
     
    (: External variables:)
    declare variable $skeleton_file external;
    declare variable $file external;
    declare variable $evo_file external;
    declare variable $variante_id external; 
     
     
    (: Fonction qui genere le contenu XML pour le tree :)
    declare function local:generate (
        $codesource as xs:string?,
        $libelle as xs:string, 
        $file as xs:string) 
                            as element()*
        { 
     for $chapter  in doc($file)/DOCUMENT/VARIANTE[@grvcod=$variante_id]/CHAPTER
        let $code := data($chapter/@code)
          return   
              if($codesource = "") then
                  <node text="{$libelle}"/>
              else if ( $codesource = $code ) then
                  <node text="{$libelle}" id="{$codesource}"/>
              else ()
        };
     
    (: Fonction recursive qui permet de pendre en compte les niveaux sans codesource :)
    declare function local:recurse (
        $niveau as element(niveau)) as element()*
        { 
            <node leaf="true" text="{data($niveau/@libelle)}">
            {
                    for $subniveau in $niveau/niveau
                    let $codesource := data($subniveau/@codesource)
                    return 
                        if(string-length($codesource) = 0) then
                             local:recurse($subniveau)
                         else
                            let $libelle := data($subniveau/@libelle)
                            return local:search($codesource,$libelle)
              }
            </node>
        };
     
    (: Fonction qui permet de lancer la recherche des sources sur le fichier de base 
    ainsi que celui des evolutions:)
    declare function local:search (
        $codesource as xs:string,
        $libelle as xs:string) 
                            as element()*
        { 
            let $res := local:generate($codesource,$libelle,$file) 
            return   $res
        };
     
    (: Main :)
    <nodes>
    {
        for $niveau in doc($skeleton_file)/organisation/niveau
        let $codesource := data($niveau/@codesource)
        let $libelle := data($niveau/@libelle)
        (: Si le niveau est un niveau sans codesource:)
        return if(string-length($codesource) = 0) then
               local:recurse($niveau)
        else
            local:search($codesource,$libelle)
    }
    </nodes>
    et voici la page jsp qui encapsulera le fichier et fait la transformation du fichier à un arbre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    <?xml version="1.0" encoding="utf-8"?>
     
    <html:html >
    <head >
    	<title><fmt:message key="fiche.technique.title"/></title>
    	<!-- CSS -->
     	<link rel="stylesheet" type="text/css" href="<c:url value='/scripts/ext-2.2/resources/css/ext-all.css'/>" />
     
     
    	<script language="JavaScript">
    	<!--
    		//
    		// Extend the XmlTreeLoader to set some custom TreeNode attributes specific to our application:
    		//
    		Ext.app.BookLoader = Ext.extend(Ext.ux.XmlTreeLoader, {
    		    processAttributes : function(attr){
    		         attr.loaded = true;
    		    }
    		});
     
    		Ext.onReady(function(){
     
     
    		var contentPanel = new Ext.Panel({
    				id: 'content-panel',
    				renderTo: 'panel',		
    		       	title: '<fmt:message key="consult.main.title"/>',
    		    	width: 700,
    		       	height: 500,
    		      	html: '<div id="source_content"/>'
    		   });
     
     
    		// Go ahead and create the TreePanel now so that we can use it below
    	    var treePanel = new Ext.tree.TreePanel({
    	    	renderTo: 'tree',		
    	    	id: 'tree-panel',
    	    	title: '<fmt:message key="consult.tree.title"/>',
    	    	 width: 250,
    	         height: 500,
    	        autoScroll: true,
     
    	        // tree-specific configs:
    	        rootVisible: false,
    	        lines: false,
    	        singleExpand: true,
    	        useArrows: true,
     
    	        // Our custom TreeLoader:
    	        loader: new Ext.app.BookLoader({
    	             dataUrl:'<c:url value="/xml/tree/ft.html"/>',
    	             //HARD-CODED variante, uniquement pour les tests , a raccorder avec ident
    	             baseParams: {	variante_id:'<bean:write name="varianteId" scope="session"/>', 
    	                 			method:'tree'} // custom http params
    	        }),
    	        root: new Ext.tree.AsyncTreeNode()
    	    });
     
    		//To be called on tree node click.
    	    treePanel.on('click', function(n){
    	    	if(n.leaf != 'true'){  // ignore clicks on folders and currently selected node
    	    		new Ajax.Updater('source_content', '/xml/tree/ft.html', {
    	    			  parameters: { method: 'select',
    	  			  					theme:'n.id',
    	  			  					variante_id: '39573' }
    	    			});
    	    	}
    	    });
     
    		//end on ready		
    		});
     
    		// -->
    		</script>
     
    </head>
    <body>
     
    	<div id="bleu">
    			<bean:message key="your.selection.text"/>
    	</div>
    	<div id="img">
    		<img src='<bean:write name="varianteImgPath"  scope="session"/>' width="114.25px"></img>
    	</div>
    	<div id="bleu">
    		<bean:write name="varianteImgLabel" scope="session"/>
    	</div>
    	<table>
    		<tr>
    			<td>
    				<div id="tree"></div>
    			</td>
    			<td>
    				<div id="panel"></div>
    			</td>
    		</tr>
    	</table>
     
    </body>
     
    </html:html>

Discussions similaires

  1. Construction d'un arbre à partir d'une recherche séquentielle de caractères
    Par smith25 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 01/04/2015, 11h19
  2. Construction d'un arbre à partir d'un fichier xml
    Par donuts dans le forum Ext JS / Sencha
    Réponses: 7
    Dernier message: 03/06/2010, 08h44
  3. Construction d'un diagramme à partir d'un fichier
    Par acer_intel dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 13/05/2008, 10h51
  4. Réponses: 1
    Dernier message: 07/05/2007, 15h21
  5. [DTD] Créé un DTD à partir d'un fichier XML
    Par Oberown dans le forum Valider
    Réponses: 5
    Dernier message: 14/12/2006, 11h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo