[Résolu] Limite le nombre d'éléments matchés

Limite le nombre d'éléments matchés [Résolu] - XML/XSL - Programmation

Marsh Posté le 16-03-2009 à 17:32:30    

Bonjour à tous,
 
Je souhaiterai faire une petite page générée en XSL depuis un flux RSS (XML). Pour tout ce qui est XML et HTML, c'est bon.
Par contre, dans ma feuille XSL, je n'ai pas trouvé le moyen de limiter le nombre d'éléments retournés.
XSL :

Code :
  1. <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version="1.0">
  2. <xsl:output method="html" encoding="ISO-8859-1"/>
  3. <xsl:template match="channel">
  4.   <xsl:for-each select="item">
  5.     <xsl:if test="???">
  6.       <xsl:param name="link"/>
  7.       <a href="{$link}"><xsl:value-of select="title"/></a>
  8.     </xsl:if>
  9.   </xsl:for-each>
  10. </xsl:template>
  11. </xsl:stylesheet>


 
XML :

Code :
  1. <channel>
  2.   <item>
  3.     <link>lien1</link>
  4.     <title>titre1</title>
  5.   </item>
  6.   <item>
  7.     <link>lien2</link>
  8.     <title>titre2</title>
  9.   </item>
  10.   <item>
  11.     <link>lien3</link>
  12.     <title>titre3</title>
  13.   </item>
  14.   <item>
  15.     <link>lien4</link>
  16.     <title>titre4</title>
  17.   </item>
  18. </channel>


 
La question est donc de n'afficher que les 3 premiers...
 
Quelqu'un aurait-il une idée ?
 
J'ai essayé avec la bonne vieille méthode, d'incrémenter une variable, mais apparemment on peut pas modifier une variable existante ! oO
 
Merci d'avance de vos réponses


Message édité par jak0 le 17-03-2009 à 11:30:21
Reply

Marsh Posté le 16-03-2009 à 17:32:30   

Reply

Marsh Posté le 16-03-2009 à 18:19:47    

XSLT est un langage fonctionnel (mauvais, mais fonctionnel quand même), donc les habitudes venant de langages impératifs/procéduraux (genre un compteur incrémenté dans une boucle) ne vont pas marcher du tout.

 

Mais de toute façon, ici tu n'en as pas besoin, XPath fournit tous les outils nécessaires, genre la fonction position().

Code :
  1. <xsl:template match="channel">
  2.     <xsl:for-each select="item[position() &lt;= 3]">
  3.         <a href="{link/text()}"><xsl:value-of select="title"/></a>
  4.     </xsl:for-each>
  5. </xsl:template>


Message édité par masklinn le 16-03-2009 à 18:20:11

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

Marsh Posté le 17-03-2009 à 10:26:26    

Merci beaucoup pour ta réponse et ton explication.
J'essaye ça de suite.

Reply

Marsh Posté le 17-03-2009 à 11:29:49    

Merci, ça marche nickel !!!
gg Masklinn ;-)

Reply

Sujets relatifs:

Leave a Replay

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