[XSL] Chuis complètement con ou quoi ?

Chuis complètement con ou quoi ? [XSL] - XML/XSL - Programmation

Marsh Posté le 06-07-2006 à 10:17:33    

Moteur XSL de OC4J (Oracle)
 
Pour simplifier, j'ai un bloc XML de la forme :
 


<rows>
    <row><total>1</total><val>1</val></row>
    <row><total>11</total><val>10</val></row>
    <row><total>16</total><val>5</val></row>
</rows>


 
Le but du jeu, c'est de passer en rouge dans un tableau la première ligne dont "total" dépasse 10.
 
Bêtement, j'ai fait ce test (à l'intérieur d'un for-each qui porte sur rows/row)
 


<xsl:if test="total &gt= 10 and ../row[position() - 1]/total &lt; 10">


 
Marche pas.
 
Je me lance donc dans le debug.
 


<xsl:value-of select="../row[1]/total"/> - <xsl:value-of select="../row[2]/total"/> - <xsl:value-of select="../row[3]/total"/>
J'ai ça en sortie :
1 - 11 - 16
 
<xsl:value-of select="position()"/> - <xsl:value-of select="../row[position()]/total"/>
J'ai ça en sortie :
1 - 1
2 - 1
3 - 1
 
<xsl:variable name="position">
 <xsl:value-of select="position()"/>
</xsl:variable>
<xsl:value-of select="$position"/> - <xsl:value-of select="../row[$position]/total"/>
J'ai ça en sortie :
1 - 1
2 - 1
3 - 1


 
Alors, que "position()" se mette à prendre le "position()" de mon "rows" quand je l'utilise dans un appel de ligne de collection, je veux bien à la limite... Mais là, même en variable, il se comporte de la sorte.
Du coup, je suis comme un con, je récupère comment le noeud précédent pour comparer la valeur ?

Reply

Marsh Posté le 06-07-2006 à 10:17:33   

Reply

Marsh Posté le 06-07-2006 à 10:21:50    

Y se fout de moi ce truc ou quoi ? :fou:
 
Je viens d'ajouter un attribut "index" à mes row. Autoincrément, c'est un compteur basique.
 


<xsl:value-of select="@index"/> - <xsl:value-of select="../row[@index]/total"/>
Sortie :
1 - 1
2 - 1
3 - 1


Message édité par Arjuna le 06-07-2006 à 10:25:49
Reply

Marsh Posté le 06-07-2006 à 10:38:29    

PS: vous avez le droit de répondre "oui" à ma question, en me fumant avec une réponse aussi évidente que mon erreur. Je préfère m'auto-proclamer con en public que de rester bloquer comme ça depuis plus d'une heure en me disant que chuis trop con de pas trouver ce qui cloche :sweat: En tout cas, ça me gave. Vais aller me pendre dans un coin tiens :/


Message édité par Arjuna le 06-07-2006 à 10:39:15
Reply

Marsh Posté le 06-07-2006 à 10:57:59    

:sweat: le cable réseau était pas bien accroché, j'ai pas réussi

Reply

Marsh Posté le 06-07-2006 à 11:00:29    

Lui non plus, il n'a aucun succès avec ses fromages...
http://www.trucsweb.com/Forum/voir [...] osparent=0

Reply

Marsh Posté le 06-07-2006 à 11:03:47    

Reply

Marsh Posté le 06-07-2006 à 11:23:26    

Arjuna a écrit :



<xsl:if test="total &gt= 10 and ../row[position() - 1]/total &lt; 10">




 

Code :
  1. <xsl:if test="total &gt= 10 and preceding-sibling()/total &lt; 10">

?


---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 06-07-2006 à 11:34:26    

Groumpf !
 
Bon, j'ai trouvé une solution.
 
Alors déjà, première connerie :
 
Contrairement à ce que j'ai dit, je faisais pas un "for-each", mais un "apply-templates" sur les row.
Résultat, en effet, moins évident de retrouver la ligne précédente.
 
Ensuite, voici l'instruction qui va bien :
 


test="number(../row[current()/@index - 1]/total) &lt; 10 and number(total) &gt;= 10"

Reply

Sujets relatifs:

Leave a Replay

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