Paramètre dans un tableau

Paramètre dans un tableau - XML/XSL - Programmation

Marsh Posté le 18-06-2007 à 15:15:17    

Bonjour
Je n'arrive pas à répurer la bonne valeur de mon tableau d'après un attribut de ma balise XML
 
J'ai un fichier XML :
<Titre ChoixTitre="2">
 <NomTitre>Titre 1</NomTitre>
 <NomTitre>Titre 2</NomTitre>
 <NomTitre>Titre 3</NomTitre>
</Titre>
et un XSL :
<xsl:variable name="n" select="@ChoixTitre"/><xsl:value-of select="Titre/NomTitre[@n]"/>
Et ça ne marche pas......
 
D'avance merci pour la solution

Reply

Marsh Posté le 18-06-2007 à 15:15:17   

Reply

Marsh Posté le 18-06-2007 à 15:20:01    

C'est ptet parce que tu ne sais pas accéder à une variable XSL [:petrus75]
 
Parce que je peux te jurer que @n ça ne va pas te donner la valeur de la variable créée par <xsl:variable name="n" select="@ChoixTitre"/>
 
Accessoirement, les noms de nodes et d'attributs XML sont habituellement écrits en minuscules et séparés par des "-", ou bien au pire écrits en camelCase pas en PascalCase [:petrus75]
 
Enfin, le XML est déjà bien assez verbeux pour ne pas en rajouter, pourquoi ne pas écrire

Code :
  1. <titre choix="2">
  2.    <nom>Titre 1</nom>
  3.    <nom>Titre 2</nom>
  4.    <nom>Titre 3</nom>
  5. </titre>


qui est plus court, plus clair, moins verbeux et moins redondant [:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-06-2007 à 16:43:33    

Merci pour ta réponse qui m'apporte aucune solution.....
 
---- Parce que je peux te jurer que @n ça ne va pas te donner la valeur de la variable créée par <xsl:variable name="n" select="@ChoixTitre"/> ----
 
Cela, je le sais déjà, sinon je poserais pas la question.

Reply

Marsh Posté le 18-06-2007 à 16:44:41    

mbar34 a écrit :

Merci pour ta réponse qui m'apporte aucune solution.....
 
---- Parce que je peux te jurer que @n ça ne va pas te donner la valeur de la variable créée par <xsl:variable name="n" select="@ChoixTitre"/> ----
 
Cela, je le sais déjà, sinon je poserais pas la question.


Si tu sais déjà quel est le problème, pourquoi tu postes ici au lieu de regarder la doc XSL la plus proche pour savoir comment on référence une variable en XSL  [:pingouino dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-06-2007 à 16:55:45    

D'après toi, à quoi sert un forum........
Alors s'il te plait, occupe toi d'un autre post ou va jouer sur un autre forum
J'attends une réponse sérieuse pas une polémique.
A bon entendeur...

Reply

Marsh Posté le 18-06-2007 à 17:25:51    

mbar34 a écrit :

D'après toi, à quoi sert un forum........


À poser de vraies questions quand on a vraiment cherché [:petrus dei]

mbar34 a écrit :

J'attends une réponse sérieuse pas une polémique.


Bon, d'accord, j'ai pitié de toi. voilà le problème


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-06-2007 à 19:11:19    

mbar34 a écrit :

J'attends une réponse sérieuse pas une polémique.


C'est $n, pas @n. Mais je recommande quand même un petite lecture de w3schools (http://www.w3schools.com/xsl/el_variable.asp). ;)
 
Pour en revenir au nommage des éléments, je serais tenté de dire que l'argument "verbeux" de notre camarade n'est pas pleinement recevable. Ca ne fait pas de mal d'utiliser quelque chose de court pour améliorer la lisibilité et (si peu) la vitesse de parsing, mais se concentrer sur la sémantique de l'élément est plus intéressant. En toute logique, un nom est un nom, qu'il serve pour un titre ou pour autre chose.

Reply

Marsh Posté le 18-06-2007 à 21:08:17    

rx__ a écrit :

se concentrer sur la sémantique de l'élément est plus intéressant.


Ce qui reste en faveur de mon argumentaire, aucune raison de générer des redondances sémantiques [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 19-06-2007 à 08:20:03    

Ha oui pardon.. Ce n'est pas dans la variable du tableau Titre/NomTitre[@n] ou j'ai bien mis Titre/NomTitre[$n] mais dans la récupération dans cette variable n du noeud ChoixTitre. J'ai tout essayé :
<xsl:variable name="n" select="@ChoixTitre"/><xsl:value-of select="Titre/NomTitre[$n]"/> marche pas.
<xsl:variable name="n" select="{ChoixTitre}"/><xsl:value-of select="Titre/NomTitre[$n]"/> marche pas.
<xsl:variable name="n" select="{Titre/ChoixTitre}"/><xsl:value-of select="Titre/NomTitre[$n]"/> marche pas.
<xsl:variable name="n" select="2"/><xsl:value-of select="Titre/NomTitre[$n]"/> et la ça marche.....
Ma question est comment récupérer dans une variable la valeur d'un noeud ou d'un attribut d'un fichier XML ?
J'ai déjà regardé dans plusieurs bouquins et sites internet et je n'ai pas trouvé la réponse.

Reply

Marsh Posté le 19-06-2007 à 08:41:56    

si tu fais un <xsl:value-of select="@ChoixTitre"/> et (après ton xsl:variable) un <xsl:value-of select="$n"/> ça te ressort quoi dans ton doc?
 
Il est possible (probable?) que ton $n contienne un string au lieu d'un int, et je doute qu'on puisse indexer un tableau avec des strings en XSL, donc il faudrait peut-être caster/typer ton xsl:variable.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 19-06-2007 à 08:41:56   

Reply

Marsh Posté le 19-06-2007 à 08:59:59    

en utilisant @ChoixTitre (donc avec un attribut : <Titre ChoixTitre="2"> )ça marche pas. si je mets dans le xml :
<Titre>
 <ChoixTitre>2</ChoixTitre>  
 <NomTitre>Titre 1</NomTitre>  
 <NomTitre>Titre 2</NomTitre>  
 <NomTitre>Titre 3</NomTitre>  
</Titre>  
et dans le xsl :
<xsl:value-of select="Titre/ChoixTitre"/><xsl:value-of select="$n"/> ça me renvoi la valeur 3.
Que ce soit un attribut ou un noeud, je n'ai jamais la valeur 2...
J'ai bien pensé que cela pouvait venir d'un problème de cast mais j'ai essayé number(Titre/ChoixTitre)  mais ça ne marche pas non plus.

Reply

Marsh Posté le 19-06-2007 à 09:03:21    

Pour l'instant, j'ai contourné le problème en faisant :
<Titre>  
 <ChoixTitre>2</ChoixTitre>
 <NomTitre1>Titre 1</NomTitre1>  
 <NomTitre2>Titre 2</NomTitre2>  
 <NomTitre3>Titre 3</NomTitre3>  
</Titre>  
 
et
 
<xsl:if test="Titre/ChoixTitre = '1'"><xsl:value-of select="Titre/NomTitre1"/></xsl:if>
                    <xsl:if test="Titre/ChoixTitre = '2'"><xsl:value-of select="Titre/NomTitre2"/></xsl:if>
                    <xsl:if test="Titre/ChoixTitre = '3'"><xsl:value-of select="Titre/NomTitre3"/></xsl:if>
 
mais c'est pas trop professionnel et ça me limite à 3 titres...

Reply

Marsh Posté le 19-06-2007 à 09:30:20    

peut-être:

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <document>
  3. <titre choixTitre="2">
  4.  <nomTitre>Titre 1</nomTitre>
  5.  <nomTitre>Titre 2</nomTitre>
  6.  <nomTitre>Titre 3</nomTitre>
  7.  <nomTitre>Titre 4</nomTitre>
  8.  <nomTitre>Titre 5</nomTitre>
  9.  <nomTitre>Titre 6</nomTitre>
  10. </titre>
  11. </document


 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:output method="xml" indent="yes"
  4.   encoding="UTF-8"/>
  5. <xsl:template match="/">
  6.  <html>
  7.   <body>
  8.    <xsl:apply-templates/>
  9.   </body>
  10.  </html>
  11. </xsl:template>
  12. <xsl:template match="titre">
  13.  <xsl:apply-templates select="nomTitre[position() = ../@choixTitre]"/>
  14.  <xsl:apply-templates select="nomTitre[number(../@choixTitre)]"/>
  15. </xsl:template>
  16. <xsl:template match="nomTitre">
  17.  Le titre choisi est: <xsl:apply-templates/>
  18.  <br/>
  19. </xsl:template>
  20. </xsl:stylesheet>

Reply

Marsh Posté le 19-06-2007 à 09:53:44    

Ca marche en faisant :
<titre valTitre="2">  
 <nomTitre>Titre 1</nomTitre>  
 <nomTitre>Titre 2</nomTitre>  
 <nomTitre>Titre 3</nomTitre>  
</titre>  
 
<xsl:variable name="n" select="number(titre/@valTitre)"/><xsl:value-of select="titre/nomTitre[$n]"/>
 
Merci de ton aide.
Il faut avouer quand même que ce n'est pas facile à trouver dans les livres.
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed