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] table des matières avec sous-titres


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut [XSL] table des matières avec sous-titres
    Bonjour,

    Je débute depuis peu avec xml/xslt, donc excusez moi si ma question est un peu bete.

    Voilà, j'ai un article en xsl comme ceci :
    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
    <article>
      <titre niveau="0" numerotation="no">Titre de l'article</titre>
     
      blabla d'intriduction
     
      <inserttoc />
     
      <titre niveau="1">Première partie</titre>
        <section>
          blabla le texte
        </section>
      <titre niveau="1">Deuxième partie</titre>
        <section>
          blbala
          <titre niveau="2">Première sous-partie</titre>
          foobar 42
          <titre niveau="2">Deuxième sous-partie</titre>
          Lorem ipsum
        </section>
    </article>
    J'aimerais avoir à l'emplacement <inserttoc /> la table des matières de l'article qui ressemble à ça :
    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
    <ol>
      <li>
        Première partie
      </li>
      <li>
        <ol>Deuxième partie
          <li>
            Première sous-partie
          </li>
          <li>
            Deuxième sous-partie
          </li>
        </ol>
      </li>
    </ol>
    Pour le moment j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      <xsl:template match="inserttoc">
        <div id="toc">
          <ol>
            <xsl:for-each select="//titre[not(@numerotation='no')]">
              <li><xsl:value-of select="." /></li>
            </xsl:for-each>
          </ol>
        </div>
      </xsl:template>
    Mais je ne vois pas comment inclure les sous-titre dans les <ol>.

    Si quelqu'un pouvait m'aider ou me donner un lien qui me ferais avancer ça serait super sympa.


    Merci d'avance.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    en fait, le problème, c'est pour selectionner uniquement les sous-titres attachés à un titre particulier... parce qu'il faut indiquer que ce sont ceux qui sont dans le <section> qui suit immédiatement le <titre> et ça, à ma connaissance, c'est impossible en XPath ("tout ceux qui sont après" : ok, mais "celui juste après" : il ne me semble pas que ce soit faisable...)

    ça serait beaucoup plus simple si ton XML était organisé comme ceci :
    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
    <article titre="Titre de l'article">
     
      <intro>blabla d'intriduction</intro>
     
      <inserttoc />
     
      <section titre="Première partie">
          blabla le texte
      </section>
      <section titre="Deuxième partie">
          blbala
          <section titre="Première sous-partie">
             foobar 42
          </section>
          <section titre="Deuxième sous-partie">
             Lorem ipsum
          </section>
      </section>
    </article>
    comme ça, il te suffit de faire un template récursif sur les éléments sections
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    En fait j'ai mis un attribut niveau à mes balises titre pour que ça soit plus simple.

    Mais je dois bien dire qu'avec le titre comme attribut de la balise section ça semble bien plus cohérent.

    Bon, je vais voir ce que je peux faire avec la structure que tu me propose.

    Merci.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    oui, l'attribut niveau peut-être utile... mais le problème c'est qu'on ne peut pas récupérer les balises titre qui sont entre deux autres... ou peut récupérer celles qui sont après ou avant une balise, mais pas juste après, ou entre deux...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  5. #5
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    En fait c'est beaucoup plus simple avec la structure que tu as proposé.

    Maintenant mon problème est dans le corps de l'article, mettre les titres des sections entre balise <hn> avec n entre 4 et 6 inclus.

    Pour le moment j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      <xsl:template match="section">
        <xsl:if test="string-length(@titre)!=0">
          <h4>
            <xsl:value-of select="@titre" />
          </h4>
        </xsl:if>
     
        <div class="section">
          <xsl:apply-templates />
        </div>
      </xsl:template>

    Et question subsidiaire : je n'ai aucune idée de la façon de générer un lien dans la toc pour qu'il pointe vers la section de la page qui corresspond.

    Merci d'avance.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut, pour la balise <hn> regarde ceci : http://xml.developpez.com/faq/?page=3#xslt_compteur tu peux facilement l'adapter à mon avis ^^

    pour ce qui est du lien, il te faut modifier le template pour les titres (dans les sections ^^) pour faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a name="nom unique, exemple 1.1, 1.2, etc...">Le titre</a>
    et ensuite dans la toc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="#le nom unique">texte</a>
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

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

Discussions similaires

  1. [WD-2003] table des matières avec code couleur
    Par enretard dans le forum Word
    Réponses: 7
    Dernier message: 02/04/2009, 22h11
  2. Table des matières avec doublons
    Par Stéphane Olivier BERNARD dans le forum IHM
    Réponses: 4
    Dernier message: 04/10/2007, 09h40
  3. Réponses: 0
    Dernier message: 14/09/2007, 13h13
  4. [CR11] une table des matières, avec n° de page : possible ?
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 08/09/2005, 11h49
  5. créer une table des matières avec fop
    Par gedeon555 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 05/07/2005, 15h54

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