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] lire plusieurs champs en parallèle ?


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Par défaut [XSLT] lire plusieurs champs en parallèle ?
    Bonjour, j'ai a traiter un fichier xml conçu de manière non hiérarchique et j'ai le problème suivant, j'ai trois types de données : rubrique, sous-rubrique et importance. Ces données sont accosiées par triplet mais présentées de la manière suivante :
    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
     
    <rubriques>
    <rubrique>rubA</rubrique>
    <rubrique>rubB</rubrique>
    </rubriques>
     
    <sousrubriques>
    <sousrubrique>ssrubA</sousrubrique>
    <sousrubrique>ssrubB</sousrubrique>
    </rubriques>
     
    <importances>
    <importance>impA</importance>
    <importance>impB</importance>
    </importances>
    Et en sortie j'aimerais quelquechose 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
    14
    15
     
    <infos>
    <info>
    <rubrique>rubA</rubrique>
    <sousrubrique>ssrubA</sousrubrique>
    <importance>impA</importance>
    <info>
     
    <info>
    <rubrique>rubB</rubrique>
    <sousrubrique>ssrubB</sousrubrique>
    <importance>impB</importance>
    <info>
     
    <infos>
    Pour le moment j'essaye de faire un for-each sur les rubriques dans lequel je fais un compteur à base de count afin d'aller faire un value-of sur les autres champs avec un select paramétré par ce compteur. Mes différents essais ne me conduisent qu'à des xsl non conformes ou à des non résultats. Est-ce que quelqu'un aurait une piste à me conseiller ?

    Merci d'avance.

    Kgouil

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

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

    bon, tu as oublié le balise root pour ton premier document

    Sinon, que penses-tu de ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:for-each select="./rubriques/rubrique">
       <info>
          <xsl:copy-of select="."/>
          <xsl:copy-of select="../../sousrubriques/sousrubrique[position()=./position()]" />
          <xsl:copy-of select="../../importances/importance[position()=./position()]" />
       </info>
    </xsl:for-each>
    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 :resolu: (en bas)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Par défaut
    Je pense que ça correspond à ce que je cherchais avec toute ma méconnaissance du xsl ! Je teste ça demain mais ça a l'air de correspondre parfaitement !

    merci

  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
    Bonjour,

    ça ne fonctionnera pas : la syntaxe ./position() est incorrecte. Il faut plutôt utiliser une variable pour mémoriser le numéro d'ordre de la rubrique courante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:for-each select="./rubriques/rubrique">
       <xsl:variable name="index" select="position()"/>
       <info>
          <xsl:copy-of select="."/>
          <xsl:copy-of select="../../sousrubriques/sousrubrique[$index]" />
          <xsl:copy-of select="../../importances/importance[$index]" />
       </info>
    </xsl:for-each>
    La syntaxe importance[$index] est un raccourci pour importance[position() = $index]
    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
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Par défaut
    J'ai finalement utilisé la méthode de grandfather et ça fonctionne parfaitement. Je n'avais pas trop trop creusé la solution avec une variable car il m'avait semblé lire quelque part que les variables en xsl étaient des constantes et que par conséquence les utiliser dans une boucle n'était pas recommencé. En tout cas, ça fonctionne c'est parfait. Merci pour la rapidité et l'efficacité de la réponse !

    Kgouil

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    arf, j'avais héisté entre les deux, mais je m'était dit que ça passerais comme ça merci pour la rectification...

    @kgouil : c'est vrai que les variables XSLT sont plutôt des constantes, et sont assez délicates à manipuler... mais là, elles sont redéfinies à chaque passage de la boucle (ce n'est pas la valeur qui change, mais bien la variable qui est redéfinie) c'est pour ça que ça marche, mais utiliser une variable pour faire par exemple i++ en XSLT, est quasi-impossible à faire... (je crois qu'il y avait un truc en jouant sur les différentes portées mais assez pénible par rapport à ce qu'on veut faire ...
    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 :resolu: (en bas)

Discussions similaires

  1. Recherche d'un mot avec LIKE sur plusieurs champs
    Par reynhart dans le forum Langage SQL
    Réponses: 16
    Dernier message: 26/11/2004, 17h41
  2. [CR] Groupement dynamique sur plusieurs champs paramètrés
    Par CDRIK dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 07/06/2004, 17h55
  3. liste deroulante avec plusieurs champs
    Par JulienT dans le forum Struts 1
    Réponses: 4
    Dernier message: 20/04/2004, 17h17
  4. recuperer les id sur plusieurs champs
    Par matN59 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/03/2004, 10h23
  5. [CR9] Plusieurs champs dans details
    Par maxxou dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 28/01/2004, 13h35

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