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][XPATH] pour les tueurs (position() generate-id....


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut [XSL][XPATH] pour les tueurs (position() generate-id....
    bonjour, meme expliquer mon probleme me parait compliqué
    j ai un fichier stocké ds une variable X...
    du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <XML>
      <A name="essai1"/>
      <A name="essai2"/>
    </XML>
    dans mon doc courant XML je dois savoir quelle est la position absolue de mon noeud par rapport aux autres contenus avant et ayant un attribut A contenu dans ma variable
    donc si g un doc du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <XML>
      <EX>
        <essai name="essai1"/>   ==> resultat 1
      </EX>
    <essai name="essai1"/>   ==> resultat 2
    </XML>
    ...évidemment le fichier peut être bcp plus complexe
    voila ou j en suis pour le moment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="num" select="position(//*[@name=$X//A/@name])"/>
    plusieurs problèmes:
    1/je n avrrive jamais à utiliser la fonction position() si j ai le malheur de mettree un paramètre.
    Qq un pourrait il m expliquer?

    2/ je suppose qu il faut que je prenne en compte un generate-id() dans mon expression mais je n arrive pas à m en sortir l expression devient déja trop compliquée pour moi

    Merci,

  2. #2
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:variable name="id" select="generate-id()"/>
    <xsl:for-each select="//*[@name=$X//@name]">
      <xsl:if test="generate-id()=$id">
        <test>
          <xsl:value-of select="position()"/>
        </test>
      </xsl:if>
    </xsl:for-each>

    voila ou j en suis mais peut etre qu il y a mieu?

  3. #3
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Rien compris a ton probleme

    Tu pourrais faire un exemple plus parlant, un peu fatigué ce soir

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    position() est une fonction XPath un peu particulière en ce sens qu'elle ne renvoie la position d'un noeud qu'au sein d'un contexte implicite.

    Par exemple, dans cette expression XPath :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /document/section[position() = 3]
    /document/section sélectionne tous les éléments <section> fils de <document>, l'ensemble des noeuds constitué par les <section> constitue donc le contexte dans lequel va s'évaluer le prédicat. Chacun des noeuds <section> va servir de noeud contextuel pour l'évaluation du prédicat (s'il y a 4 noeuds <section>, le prédicat va donc être évalué 4 fois), et position() renvoie la position qu'occupe le noeud contextuel dans le contexte.

    Pour ton problème, position() n'est d'aucune utilité, il va donc falloir ruser. Il y a une imprécision dans ton énoncé : le noeud en cours d'évaluation rentre-t-il en compte dans la numération (ça semble être le cas), et non pas seulement les noeuds précédents ?
    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
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    je comprends toujours rien (grandfather tu pourrais me passer des petites pillules bleus , elles ont l'air de faire effet sur toi )
    Bon comme l'a dit grandfather la position() est fonction de la selection.
    Par contre on peut calculer la position dans un document grace a des count(preceding-sibling::*) ou des choses de ce style count(preceding::*[name() =truc]) ....
    Enfin je dis ca , je dis rien, comprend toujours pas ....

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par Erwy
    grandfather tu pourrais me passer des petites pillules bleus , elles ont l'air de faire effet sur toi
    Aucun mérite : l'habitude de travailler avec des spécifications incomplètes et imprécises...
    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

  7. #7
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    Merci grand father et désolé Erwy mais meme pour moi il est difficile d expliquer ce que je veux

Discussions similaires

  1. [XSL~FO] pour les amateurs de casse tête.
    Par lilian300703 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/12/2007, 12h10
  2. [XsL/xpath]Comment faire pour éviter les doublons?
    Par BigBarbare dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 22/05/2007, 20h31
  3. Réponses: 4
    Dernier message: 16/07/2006, 14h00
  4. [XSL][XPATH] recopier les attributs d un élément mais pas le
    Par Triangle dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/08/2005, 16h07
  5. Quel avenir pour les outils de génération de code ?
    Par Bruno75 dans le forum Débats sur le développement - Le Best Of
    Réponses: 5
    Dernier message: 05/11/2003, 18h30

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