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 :

Système d'arborescence XML/XSLT


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 31
    Par défaut Système d'arborescence XML/XSLT
    Bonjour à tous !

    Je cherche depuis un petit moment à résoudre un problème. Je fait donc appel à vous. L'objectif est de transformer un fichier XML vers un fichier HTML gràce à XSL. Je bute sur un point particulier, j'essaye de construire une sorte d'arborescence. Voila à quoi ressemble mon fichier xml.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <item nom="aaa" attribut2="kkkk"/>
    <item nom="bbb">
       <item nom="ccc" attribut2="zzzz"  />
       <item nom="ddd" attribut2="yyyy"  />
    </item
    <item nom="eee">
       <item nom="fff">
          <item nom="ggg" attribut2="wwww"  />
       </item>
    </item>
    Le nombre d'enfants et sous enfants n'est pas fixe. L'attribut attribut2 n'est disponible que si l'élément ne possède pas d'enfant. Et voila ce que je cherche à faire en HTML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    - aaa kkkk
    - bbb
        - ccc zzzz
        - ddd yyyy
    - eee
       -fff
          -ggg wwww
    avec le décalage qui sera fait en fonction du niveau. Le code suivant me donnais seulement les items de premier niveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:template match="item">
       - <xsl:value-of select="@nom" />
       <xsl:value-of select="@attribut2" />
    </xsl:template>
    J'ai essayé d'y ajouter un <xsl:for-each select="child::*"> mais que le niveau suivant apparaissait et l'ordre des éléments était inversé (le "père" resortait après ses enfants).
    J'espère avoir été assez clair. Merci pour votre aide !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 31
    Par défaut
    En fouillant un peu plus, j'ai trouvé ce qu'il me fallait.

    http://www.developpez.net/forums/d49...lt-aide-arbre/

  3. #3
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    En un peu mieux, tu pourrais écrire du vrai code HTML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <xsl:template match="/">
      <ul>
        <xsl:apply-templates select="item"/>
      </ul>
    </xsl:template>
     
    <xsl:template match="item">
      <li><xsl:value-of select="@nom" /> <xsl:value-of select="@attribut2" /></li>
      <xsl:if test="child::item">
        <ul>
          <xsl:apply-templates select="item"/>
        </ul>
      </xsl:if>
    </xsl:template>

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Citation Envoyé par Loceka Voir le message
    En un peu mieux, tu pourrais écrire du vrai code HTML
    Euh, non. En HTML une liste imbriquée se place dans un <li>, pas comme élément frère d'un <li>.
    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

  5. #5
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Oui, faute de frappe.

    Il n'empêche que c'est mieux de passer par des <li> que d'écrire des tirets à la main.

    Vlà le code corrigé :
    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
    <xsl:template match="/">
      <ul>
        <xsl:apply-templates select="item"/>
      </ul>
    </xsl:template>
     
    <xsl:template match="item">
      <li><xsl:value-of select="@nom" /> <xsl:value-of select="@attribut2" />
        <xsl:if test="child::item">
          <ul>
            <xsl:apply-templates select="item"/>
          </ul>
        </xsl:if>
      </li>
    </xsl:template>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'arborescence XML/XSLT
    Par prisme.erp dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 24/03/2011, 15h31
  2. [XML-XSLT] Données dans un tableau
    Par Hoegaarden dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 10/12/2004, 15h51
  3. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 16h08
  4. Astuces XML/XSLT
    Par haypo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/06/2003, 08h42

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