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 :

[XML][XSLT][debutant]retour d'une fonction


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 82
    Points : 55
    Points
    55
    Par défaut [XML][XSLT][debutant]retour d'une fonction
    Bonjour,

    Je suis débutant en XSLT mais j'ai déjà quand meme regarder quelques tuto. Si j'ai bien compris il faut faire du récursif et on ne peut pas ré-assigner une variable. Mais j'ai d'autres questions:
    - Est ce qu'une fonction peut retourner une valeur qui pourra être réutilisée comme parametre lors de l'appel à une autre fonction.

    - Pourquoi le code suivant ne marche pas? Comment faire autrement?

    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
    31
    32
    33
    34
    35
    36
    37
     
    <xsl:template name="displayScaleHeader">
    	 <div style="width: 100%;text-align: center;">
    	  <table cellspacing="0" cellpadding="0" rules="rows" border="0" style="width: 100%; border-collapse: collapse; border: solid 1px #CCCCCC;">
    	      <tr>
    	        <th style="text-align: center;">Date</th>
    	        <th style="text-align: center;">Movements</th>
    	        <th style="text-align: center;">Balances</th>
    	      </tr>
    </xsl:template>
     
    <xsl:template match="/">
     
    ............
     
      <xsl:call-template name="displayScaleHeader"></xsl:call-template>
     
      <xsl:for-each select="PREVIOUS_BALANCE">
    	 <tr>
                <td style="text-align: right;"><xsl:value-of select="DATE_FORMATED"/></td>
                <td style="text-align: left;"><label class="TEXTE_NOIR">Previous Balance</label></td>
                <td style="text-align: right;">
                    <xsl:if test="BALANCE_DEBIT != ''">
                      <xsl:value-of select="BALANCE_DEBIT"/>
                    </xsl:if>
                </td>
              </tr>
     
          </xsl:for-each>
     
         </table>
     </div>
     
     
    	  ........
     
    </xsl:template>
    Tout probleme a une solution.

  2. #2
    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 Re: [XML][XSLT][debutant]retour d'une fonction
    Citation Envoyé par maxvador
    - Est ce qu'une fonction peut retourner une valeur qui pourra être réutilisée comme parametre lors de l'appel à une autre fonction.
    Oui/non
    1) il n'y a pas de fonction et, le call- template n'a pas de propriété "return"
    2) On peut passer outre en faisant le call-template dans une variable et en l'utilisant
    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
    .....
    	<xsl:variable version="res"><xsl:call-template name="test"></xsl:call-template></xsl:variable>
     
    	<xsl:call-template name="testbis">
                        <xsl:with-param name="val" select="$res"/>
     
                        </xsl:call-template>
    	.....
     
    	<xsl:template name="test">
    	<a>le test</a>
    	</xsl:template>
     
              <xsl:template name="testbis">
    	   <xsl:param name="val"/>
    <xsl:value-of select="$val"/>
    	</xsl:template>
    Citation Envoyé par maxvador
    - Pourquoi le code suivant ne marche pas? Comment faire autrement?
    Code xml non valide, tu ouvres ta table dans le premier template mais ne l'y ferme pas

  3. #3
    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
    on peut récupérer la valeur retournée par un template en l incluant dans une variable
    quant à ton code, il faudrait que tu expliques ce qui ne va pas et que tu mettes un exemple de XML

  4. #4
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 82
    Points : 55
    Points
    55
    Par défaut
    Code xml non valide, tu ouvres ta table dans le premier template mais ne l'y ferme pas
    Un template n'est donc pas qu'une "simple fonction" qui peut afficher n'importe quoi? Il faut forcement que ce soit valide syntaxiquement meme si le resultat final est valide lui?

    - Dans ton exemple ta fonction "test" ne "renvoie" que "le test" mais est-il possible en fait de faire le display d'un noeud et par exemple de retourner la valeur d'un des elements du noeud?

    - Si récursivement je change la valeur d'un paramètre d'un template, est-il possible de recupérer la dernière valeur de se paramètre dans la partie du code qui a fait le premier call-template?

    Pour etre précis, je veux afficher un certain nombre de noeuds d'un element et lorsque j'ai atteint cette valeur je veux afficher du HTML (toujours le meme) puis recommencer le parcours de mon arbre XML là où je m'en etais arreté, et ainsi de suite......
    Tout probleme a une solution.

  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
    Citation Envoyé par maxvador
    Un template n'est donc pas qu'une "simple fonction" qui peut afficher n'importe quoi? Il faut forcement que ce soit valide syntaxiquement meme si le resultat final est valide lui?
    Un xslt est un document XML et tu dois respecter cette norme, or

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <a>
      <b>
    </a>
    <a>
      </b>
    </a>
    est interdit
    Citation Envoyé par maxvador
    - Dans ton exemple ta fonction "test" ne "renvoie" que "le test" mais est-il possible en fait de faire le display d'un noeud et par exemple de retourner la valeur d'un des elements du noeud?
    Question pas clair
    Tu ne peux avoir comme valeur retour que: du booelen, du string, du nombre ou du fragment-node (type qui se rapproche du string et que j'utilise dans mon exemple)
    Si tu demandes si tu peux avoir un node-set en retour , la reponse est non
    par contre rien ne t'empeche d'afficher certazine valeur ou propriété d'un noeud via un xsl:value-of
    Pour etre précis, je veux afficher un certain nombre de noeuds d'un element et lorsque j'ai atteint cette valeur je veux afficher du HTML (toujours le meme) puis recommencer le parcours de mon arbre XML là où je m'en etais arreté, et ainsi de suite......
    Je ne vois pas ce qui change d'un parcours classique de apply-templates
    Tu ne focaliserais pas un peu trop sur le call-template ? Pas clair

  6. #6
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 82
    Points : 55
    Points
    55
    Par défaut
    Oui effectivement je peux m'en passer.

    Par contre je comprends pas pourquoi je peux pas faire ce code là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <div id="id1">
    	<xsl:choose>
    	  <xsl:when mycondition>
    	  	HelloWorld
    	  </xsl:when>
    	  <xsl:otherwise>
    	  	</div>
    	  	<div id="id2">
    	  		Bonjour tout le monde
    	  </xsl:otherwise>
    	</xsl:choose>
    </div>
    Une fois que le XSL est interprété le code HTML est valide. Est ce qu'on peut faire la meme chose mais de manière différente alors?
    Tout probleme a une solution.

  7. #7
    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
    1) ton code n'est pas toujours valide


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <div id="id1"> 
             </div> 
            <div id="id2"> 
               Bonjour tout le monde 
            </div> 
       </div>
    Un /div en trop
    2) il n'y a aucune disctinction entre les balise xslt ou autre.

    Si tu utilise des balise tu dois être conforme dès le départ.
    Si sur un besoin particulier tu es obligé de detourner ce principe tu dois utliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:text disable-output-escaping="yes">&lt;ma_balise&gt;</xsl:text> 
     
     
    .............
    <xsl:text disable-output-escaping="yes">&lt;/ma_balise&gt;</xsl:text>

  8. #8
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 82
    Points : 55
    Points
    55
    Par défaut
    J'avais vu que mon code n'etais pas valide, je venais d'éditer mon message.

    Je vais essayer ta technique.

    Merci pour toutes ces infos
    Tout probleme a une solution.

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

Discussions similaires

  1. retour d'une fonction
    Par papy_tergnier dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 15/05/2006, 17h21
  2. recuperer en php le retour d'une fonction plsql
    Par gismoblue dans le forum Langage SQL
    Réponses: 1
    Dernier message: 14/03/2006, 16h39
  3. PL/SQL retour d'une fonction
    Par aaronw dans le forum PL/SQL
    Réponses: 2
    Dernier message: 13/12/2005, 13h25
  4. [Oracle 9.1] Types de retour d'une fonction PL/SQL
    Par ftrifiro dans le forum PL/SQL
    Réponses: 8
    Dernier message: 12/10/2005, 16h54
  5. [XML+XSLT+MSXML] Ecrire ses propres fonctions
    Par görgh dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 19/05/2005, 13h04

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