Forum Programmation.web Problème de xml

Posté par .
Tags : aucun
0
12
déc.
2005
Hello !
J'espère être dans le bon forum... sinon, tant pis.
Voilà, j'ai un fichier xml qui comporte cette structure :
<menu>
<sousmenu>
<commande />
<commande />
</sousmenu>
<sousmenu>
<sousmenu>
<commande />
<commande />
</sousmenu>
<commande />
<commande />
</sousmenu>
</menu>

J'aimerai le parser avec un fichier xsl de mon cru de façon à avoir des listes pour présenter un menu dynamique, mais je dois être trop fatigué, car je n'arrive pas à lui faire transformer les sousmenu de niveau supérieur à 1. Si quelqu'un a une idée, je suis preneur.
Merci par avance.
  • # Trop vite tapé...

    Posté par . Évalué à  1 .

    Bon, voilà ce que je veux : pouvoir faire correspondre mon menu à une liste -> ça, je sais faire. pouvoir faire correspondre chaque sousmenu du menu à une liste -> ça, je sais faire. pouvoir faire correspondre chaque commande à un élément de liste -> ça, je sais faire. Ce qui me chagrine, c'est l'exploration de l'arborescence pour avoir un sousmenu suivi d'un sousmenu, suivi d'un sousmenu, suivi d'une liste de commandes. En fait, je veux pouvoir avoir des listes imbriquées, sans en connaitre la profondeur à l'avance. Et là, je sèche. Pour l'indentation, revoici mon message original, avec les balises qui vont bien (j'espère) : <menu> <sousmenu> <commande /> <commande /> </sousmenu> <sousmenu> <sousmenu> <commande /> <commande /> </sousmenu> <commande /> <commande /> </sousmenu> </menu>
    • [^] # Re: Trop vite tapé...

      Posté par (page perso) . Évalué à  3 .

      ce serait peut-être intéressant d'avoir la page xslt pour pouvoir te dire ce que tu ne fais pas bien. A moins qu'elle ne doive rester secrète :)
      • [^] # Re: Trop vite tapé...

        Posté par (page perso) . Évalué à  2 .

        Tu définis une template pour sous sous menu, et dans chaque sous menu tu ajoutes un apply-templates. Enfin poste ta feuille effectivement, ce sera plus clair.
        • [^] # Re: Trop vite tapé...

          Posté par . Évalué à  2 .

          Pfiou.... Hier, j'étais vraiment dans le gaz...
          Bon, voici ma feuille xsl :

          <xsl:template match="/">
          Menu
          <xsl:apply-templates/>
          </xsl:template>

          <xsl:template match="menu">
          <xsl:for-each select="./sousmenu">
          <xsl:apply-templates select="." />
          <xsl:apply-templates select="./sousmenu" />
          <xsl:apply-templates select="commande" />
          </xsl:for-each>
          <xsl:variable name="idMax">
          <xsl:number value="count(sousmenu) + 1" />
          </xsl:variable>
          X : Quitter
          </xsl:template>

          <xsl:template match="sousmenu">
          ----><xsl:value-of select="@titre" />
          <xsl:apply-templates select="commande" />
          </xsl:template>

          <xsl:template match="commande">
          X : <xsl:value-of select="." />
          </xsl:template>


          Je ne vois pas trop la différence entre un xsl:for-each et un xsl:apply-template, mais bon... Il faudrait certainement que je me documente pour apprécier la différence entre les 2.
          Merci pour votre aide à tous les deux, en tout cas.
          • [^] # Re: Trop vite tapé...

            Posté par (page perso) . Évalué à  1 .

            Le apply-templates te permet d'êter récursif, si dans l'élément sous menu il y a un sous menu, xslt va appliquer le template correspondant.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.