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

XSL/XSLT/XPATH XML Discussion :

[xsl] affichage arbre simplifié


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 6
    Points : 4
    Points
    4
    Par défaut [xsl] affichage arbre simplifié
    hello !

    j'ai un fichier XML du style :
    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
     
    <node nom="A">
        ...
        <leaf>a</leaf>
        <node name="AB">
            ...
            <node name="ABC">
                ...
                <leaf>abc</leaf>
            </node>
        <leaf>b</leaf>
        <node name="AC">
            ...
        </node>
    </node>
    et je voudrais generer un fichier texte tout simple genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    -A
        - a
        - AB
           - ABC
               -abc
        - b
        - AC
    voici ce que je fais dans la xsl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <xsl:template match="Node">
    <xsl:value-of select="@name"/>
    <xsl:text>
       - </xsl:text><xsl:apply-templates select="Node|Leaf"/>
    </xsl:template>
     
    <xsl:template match="Leaf">
    <xsl:value-of select="text()"/>
    </xsl:template>
    mon probleme est que l'indentation recursive ne marche pas, ça me genere un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    -A
        - a
        - AB
        - ABC
        - abc
        - b
        - AC
    qq'un aurait-il une idee la-dessus ??

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 29
    Points
    29
    Par défaut
    j'avais fait un XSL générique pour qfficher n'importe quel XML sous forme d'un arbre déployable (avec de tableaux).
    C'est pas parfaitement la même chose mais peut être que ça pourra t'inspirer 8) ?
    voici le fichier XSL, tu peux le tester (sur IE , par contre je ne garantis pas sur les autres) :
    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
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="html" encoding="Windows-1252"/>
     
    	<xsl:template match="/*">
    		<html>
     
    		<style type="text/css">
    		.FERME {background-color:#BBBBCC; font-family: Verdana; font-size: 8pt; cursor:pointer;}
    		.OUVERT { background-color:#EEF3FB; font-style:blod;font-family: Verdana; font-size: 8pt; cursor:pointer;}
    		.DERNIER { font-style:blod;font-family: Verdana; font-size: 8pt;}
    		.VALEURNOEUD { background-color:#FFFFCC; font-family: Verdana; font-size: 8pt;}
    		.ATTRIBUT {color:#999999;}
    		</style>
     
     
    		<script language="javascript">
    			function affiche_cache(objet){
    			ObjetCible=objet.parentNode.nextSibling;
    			if (ObjetCible.style.display=="none"){
    			    ObjetCible.style.display="block";
    			    objet.className="OUVERT";
    			      }
    			else{    
    			    ObjetCible.style.display="none";
    			    objet.className="FERME";
    			    }
    			}
    		</script>
     
    			<body>		
    				<table width="100%" align="center" border="1">
    					<tr>
    						<td width="100%" align="center" class="OUVERT" onclick="javascript:affiche_cache(this);">
    							<xsl:attribute name="colspan"><xsl:value-of select="count(child::*)"/></xsl:attribute>
    							<b><xsl:value-of select="name()"/></b>
    	                				(<span class="ATTRIBUT"><xsl:for-each select="@*"><b><xsl:value-of select="name()"/></b> : <i><xsl:value-of select="."/></i>  </xsl:for-each></span>)    
                      				</td>
    					</tr>
    					<tr>
    						<xsl:apply-templates select="*"/>
    					</tr>
    				</table>
    			</body>
    		</html>
    	</xsl:template>
     
     
    	<xsl:template match="*">
    		<td valign="top" bgcolor="white">
    			<xsl:choose>
     
    				<xsl:when test="*">
    					<table width="100%" align="center" border="1">
    						<tr>
    							<td width="100%" align="center" class="FERME" onclick="javascript:affiche_cache(this);">
    								<xsl:attribute name="colspan"><xsl:value-of select="count(child::*)"/></xsl:attribute>
    								<b>	<xsl:value-of select="name()"/></b>
    								 (<span class="ATTRIBUT"><xsl:for-each select="@*"><b><xsl:value-of select="name()"/></b> : <i><xsl:value-of select="."/></i>  </xsl:for-each></span>)
    							 </td>		
    						</tr>
    						<tr style="display:none">
    							<xsl:apply-templates select="*"/>
    						</tr>
    					</table>
    				</xsl:when>
     
    				<xsl:otherwise>
    					<div class="DERNIER">
    					<b><xsl:value-of select="name()"/></b>						
    					 (<span class="ATTRIBUT"><xsl:for-each select="@*"><b><xsl:value-of select="name()"/></b> : <i><xsl:value-of select="."/></i> </xsl:for-each></span>)
    					 </div>
    					 <div class="VALEURNOEUD"><xsl:value-of select="."/></div>
             			</xsl:otherwise>
     
    			</xsl:choose>
    		</td>
    	</xsl:template>
    </xsl:stylesheet>

  3. #3
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    je crois que le problème d'alignement vient de la balise text qui doit passer à la ligne

    essaye en imbriquant des tableaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <xsl:template match="Node"> 
    <table>
      <td>- <xsl:value-of select="@name"/></td>
      <td><xsl:apply-templates select="Node|Leaf"/></td>
    </table>
    </xsl:template> 
     
    <xsl:template match="Leaf"> 
      <xsl:value-of select="text()"/> 
    </xsl:template>
    "Les gens normaux croient que si ca marche, c'est qu'il n'y a rien à reparer. Les ingénieurs croient que si ca marche, c'est que ca ne fait pas encore assez de choses."
    --Scott Adams

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    bien vu l'imbrication des tableaux
    merci !

Discussions similaires

  1. [XSL] Affichage hors boucle
    Par Ptite Pupuce dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 07/11/2007, 19h07
  2. Affichage BDD simplifié
    Par psykbe dans le forum IHM
    Réponses: 2
    Dernier message: 06/10/2007, 19h23
  3. [XSL] affichage de liste dans une liste
    Par kikoo_paris dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/06/2007, 13h41
  4. [XSL]Affichage d'un contenu
    Par kirk80 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/07/2005, 16h00
  5. [xsl]affichage liste de 2 couleurs
    Par megane dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 28/06/2004, 09h30

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