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 :

Problème de convertion en NodeList


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2004
    Messages : 91
    Points : 46
    Points
    46
    Par défaut Problème de convertion en NodeList
    Bonjour,

    Après de nombreuses recherches je ne trouve malheureusement pas de solution à mon problème peut-être pourriez-vous m'aider.
    Je tente de faire un for-each avec une variable mais j'obtiens une erreur.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:variable name="arbre">
    <xsl:choose>
    <xsl:when test="$param1 != '0'">theGroups/group[@groupName=$param1]</xsl:when>
    <xsl:otherwise>theGroups/group</xsl:otherwise>
    </xsl:choose>
    </xsl:variable>
     
    <xsl:for-each select="$arbre">
    <xsl:value-of select="@groupName"/>
    </xsl:for-each>
    Et voici l'erreur :
    Error transforming document XSLT :
    Impossible de convertir #RTREEFRAG en fonction NodeList !
    D'avance merci

  2. #2
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Salut,

    Moi je prendrai le problème dans un autre sens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <xsl:variable name="arbre"> 
    <xsl:choose> 
    <xsl:when test="$param1 = '0'">1</xsl:when> 
    <xsl:otherwise><xsl:value-of select="$param1"/></xsl:otherwise> 
    </xsl:choose> 
    </xsl:variable>
    et après tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:for-each select="theGroups/group[@groupName=$arbre]"> 
    <xsl:value-of select="@groupName"/> 
    </xsl:for-each>
    ++

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2004
    Messages : 91
    Points : 46
    Points
    46
    Par défaut
    en fait pas tout à fait :
    il faut que $arbre prenne theGroup/group si $param1 = '0' et doit prendre theGroup/group[@groupName=$param si $param1 != '0'

  4. #4
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    il faut que $arbre prenne theGroup/group si $param1 = '0'
    Ce qui veux dire que si ton param1=0 tu dois faire un for-each sur tous les noeuds group c'est bien ca?
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2004
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2004
    Messages : 91
    Points : 46
    Points
    46
    Par défaut
    oui tout à fait

  6. #6
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    alors pourquoi faire un for-each quand il n'est pas à 0!

    je te propose plutot:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:choose> 
    <xsl:when test="$param1 = '0'"><xsl:for-each select="theGroups/group"> 
    <xsl:value-of select="@groupName"/> 
    </xsl:for-each></xsl:when> 
    <xsl:otherwise><xsl:value-of select="theGroups/group[ position()=$param1]/@groupName"/></xsl:otherwise> 
    </xsl:choose>
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    D'après la réponse de ce lien :
    http://www.stylusstudio.com/xsllist/...post51290.html

    Cela vient du fait que avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:variable name="arbre">
    <xsl:copy-of select="theGroups/group"/>
    </xsl:variable>
    la variable $arbre contient une donnée de type "tree fragment" et non pas de type "node-list". Il n'est donc pas possible d'y acceder comme un node avec un "for-each" dessus ensuite.


    La première solution consiste à triturer le code pour obtenir un "node-list" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="arbre" select="theGroups/group"/>
    La deuxième solution consiste à utiliser une fonction étendue node-set() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:variable name="arbre1">
    <xsl:copy-of select="theGroups/group"/>
    </xsl:variable>
    <xsl:variable name="arbre" select="exslt:node-set($arbre1)"/>
    (Voir http://www.exslt.org/exsl/functions/node-set/index.html pour comprendre comment ça marche)
    (Les fonctions étendues ne sont pas disponibles partout...)


    La troisième solution consiste à utiliser un parseur qui fait du XSLT1.1 et pas du XSLT1.0

Discussions similaires

  1. Problème de convertion de chaine de caractère en int
    Par sam83 dans le forum C++Builder
    Réponses: 2
    Dernier message: 09/06/2008, 02h03
  2. Problème de convertion
    Par pc152 dans le forum C#
    Réponses: 5
    Dernier message: 15/10/2007, 20h02
  3. Problème avec convert datetime
    Par sane79 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/07/2007, 10h43
  4. Problème de Convertion de types
    Par simtim dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 27/05/2007, 22h54
  5. Réponses: 2
    Dernier message: 18/11/2006, 15h06

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