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 :

[XSLT] Parcours récursif d'une liste


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club Avatar de Tueur_a_gage
    Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 77
    Points : 59
    Points
    59
    Par défaut [XSLT] Parcours récursif d'une liste
    Bonjour

    j'ai un graphe 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
     
    <map>
      <node text="a1">
        <node text="a1_1">
        <node text="a1_2">
          <node text="a1_2_1">
          <node text="a1_2_2">
            <node text="a1_2_2_1">
            <node text="a1_2_2_2">
        <node text="a1_3">
        <node text="a1_4">
      <node text="b1">
    </map>
    Je souhaite récupérer un texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    =a1=
    *a1_1
    *a1_2
    :*a1_2_1
    :*a1_2_2
    ::*a1_2_2_1
    ::*a1_2_2_2
    *a1_3
    *a1_4
    J'ai fait une xsl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:strip-space elements="*"/>
      <xsl:output method="text" indent="no" omit-xml-declaration="yes" encoding="ISO-8859-1"/>
      <xsl:template match="/"><xsl:variable name="mapversion" select="map/@version"/>'''Date''' : <xsl:value-of select="map/node/@TEXT"/><xsl:text>&#xa;</xsl:text><xsl:apply-templates/><xsl:text>&#xa;</xsl:text>----<xsl:text>&#xa;</xsl:text>Back to [[List]]</xsl:template>
      <xsl:template match="map/node/node">=<xsl:value-of select="@TEXT"/>=<xsl:text>&#xa;</xsl:text><xsl:apply-templates/></xsl:template>
      <xsl:template match="map/node/node/node">*<xsl:value-of select="@TEXT"/><xsl:text>&#xa;</xsl:text><xsl:apply-templates/></xsl:template>
      <xsl:template match="map/node/node/node/node">:*<xsl:value-of select="@TEXT"/><xsl:text>&#xa;</xsl:text><xsl:apply-templates/></xsl:template>
      <xsl:template match="map/node/node/node/node/node">::*<xsl:value-of select="@TEXT"/><xsl:text>&#xa;</xsl:text><xsl:apply-templates/></xsl:template>
      <xsl:template match="map/node/node/node/node/node/node">:::*<xsl:value-of select="@TEXT"/><xsl:text>&#xa;</xsl:text><xsl:apply-templates/></xsl:template>
    </xsl:stylesheet>

    Question Optimisation, c'est pas top (je ne gère pas les niveaux > 5) et je peux difficilement gérer des cas plus tordu à chaque niveau.

    Je souhaiterais avoir un template dédié au "node" pur pour pouvoir faire des tests du style "node/qq chose"

    Avez-vous une idée ?

  2. #2
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    juste un truc bête peut-être mais pourquoi tu n'as pas mis des attributs différents pout tes balises node ?

    du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <map>
    <node text="a1">
    <node text1="a1_1">
    <node text2="a1_1_1">
     
    ....
    Ca te permettait ensuite de faire un test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:choose>
    <xsl:when test="node[@text]">
    instructions...
    </xsl:when>
    <xsl:when test="node[@text1]">
    instructions...
    ...

    Je ne connais pas le principe du graph XML je suis allée voir sur Internet vite fait et ca a l'air complexe...

    Je pense que tu devrais peut etre mettre tout tes noeuds au même niveau sous ta balise map et leur donner un attribut différent afin de faciliter ton code et ensuite il ne te reste plus qu'à tester l'attribut...

    Voila
    Bon courage

  3. #3
    Membre du Club Avatar de Tueur_a_gage
    Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 77
    Points : 59
    Points
    59
    Par défaut
    Je n'ai pas le choix dans le format XML, il s'agit en fait du code xml de l'outil Freemind qui est un MindMapper.

  4. #4
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    avec l'attribut position () dans ton xsl, ca ne te donne rien ?

  5. #5
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    J'ai trouvé quelques éléments sur position ()


  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Je te conseille de passer un parametre dans ton appel au même template match="node" pour tracer le niveau auquel tu es et faire des appels recursifs avec apply-templates.

  7. #7
    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,

    tout simplement :
    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
    <xsl:template match="node/node">
      <xsl:variable name="nb-ancetres" select="count(ancestor::node)" />
      <xsl:choose>
        <xsl:when test="$nb-ancetres = 1">
          <xsl:text>=</xsl:text>
        </xsl:when>
        <xsl:otherwise>
          <xsl:call-template name="prefixe">
            <xsl:with-param name="longueur" select="$nb-ancetres" />
          </xsl:call-template>
          <xsl:text>*</xsl:text>
          <xsl:value-of select="@TEXT" />
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
    <xsl:template name="prefixe">
      <xsl:param name="longueur" />
      <xsl:if test="$longueur &gt; 0">
        <xsl:text>:</xsl:text>
        <xsl:call-template name="prefixe">
          <xsl:with-param name="longueur" select="$longueur - 1" />
        </xsl:call-template>
      </xsl:if>
    </xsl:template>
    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

Discussions similaires

  1. Parcours récursif d'une arborescence
    Par Michel Deriaz dans le forum Codes sources à télécharger
    Réponses: 1
    Dernier message: 13/09/2017, 17h30
  2. Parcours récursif d'une arborescence
    Par _iri_ dans le forum C
    Réponses: 10
    Dernier message: 16/09/2011, 21h41
  3. Parcours double d'une liste chainée
    Par kashikai dans le forum Bibliothèque standard
    Réponses: 2
    Dernier message: 06/08/2009, 08h13
  4. parcours aléatoire d'une list STL
    Par istdasklar dans le forum SL & STL
    Réponses: 6
    Dernier message: 16/05/2007, 02h30
  5. [XSLT]Transformation d'une liste de virgule
    Par Le-Cortex dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 22/03/2006, 17h18

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