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] Numérotation sur plusieurs branches


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Par défaut [XSLT] Numérotation sur plusieurs branches
    Bonjour,

    Je possède un fichier xml de ce genre :
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="index.xsl"?>
    <Root>
      <A>
        <C />
        <C />
      </A>
      <B>
        <D>
          <C />
          <C />
          <C />
        </D>
      </B>
      <B>
        <D>
          <C />
          <C />
          <C />
          <C />
        </D>
      </B>
      <B>
        <D>
          <C />
          <C />
        </D>
      </B>
    </Root>
    Mon but est de pouvoir numéroter de manière continue tous les noeuds C en commençant à partir de 1. De mon côté, je suis arrivé à récupérer les noeuds et à les numéroter de manière continue. En revanche, je ne n'arrive pas à forcer le démarrage de la numérotation à 1. Voilà ma feuille de style XSL :
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output encoding="ISO-8859-1" indent="yes" method="html" omit-xml-declaration="yes" version="1.0"/>
      <xsl:template match="/">
        <html>
          <head>
            <title>Numérotation</title>
          </head>
     
          <body>
            <xsl:apply-templates select="//B//C" />
          </body>
        </html>
      </xsl:template>
     
      <xsl:template match="C">
        <xsl:number format="1" level="any"/><br />
      </xsl:template>
    </xsl:stylesheet>
    Et voilà ce que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11
    Voilà, merci à ceux qui pourront me filer un coup de main, j'essayerai de me débrouiller pour la suite

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

    il faut restreindre le champ de la numérotation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:number format="1" level="any" count="B//C"/>
    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

  3. #3
    Membre éclairé Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Par défaut
    Merci beaucoup, ca fonctionne impec

    J'ai une dernière petite question : comment puis-je faire, dans l'exemple que j'ai donné précédemment, pour sélectionner les noeuds C entre les positions 2 et 6 par exemple ?

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="//B//C[position() &gt;= 2 and position() &lt;= 6]" />
    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 éclairé Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Par défaut
    Bon j'ai testé la solution que tu m'as donné et cela ne correspond pas à ce que je veux. Par exemple lorsque j'utilise ta portion de code, cela me renvoie 6 noeuds. Or je voudrai que cela en renvoie seulement 5. Plus précisément, je désire sélectionner les noeuds dans l'ordre en prenant d'abord le 2ème, puis le 3ème ... jusqu'au 6ème tout en étant dans la liste des noeuds C de père B. Est-ce possible ?

  6. #6
    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
    oups, j'ai effectivement répondu un peu vite... et je suis tombé tête la première dans le piège retors posé par XPath quand on utilise // et position().

    La bonne syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /descendant::C[ancestor::B][position() >= 2 and position() &lt;= 6]
    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

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

Discussions similaires

  1. [XSLT] Test sur plusieurs valeur
    Par mamax29 dans le forum XSL/XSLT/XPATH
    Réponses: 0
    Dernier message: 03/12/2010, 17h35
  2. [XSLT] Select sur plusieurs attributs
    Par maitrebn dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 28/11/2006, 13h13
  3. [XSLT] <xsl:if> test sur plusieurs condition
    Par oxilab dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 30/06/2006, 20h30
  4. [XSLT] - Trier un fichier sur plusieurs critères
    Par ytse dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/10/2005, 16h26
  5. [XSLT]select sur plusieur documents XML
    Par jesus144 dans le forum XMLRAD
    Réponses: 3
    Dernier message: 15/06/2005, 10h56

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