questions de débutant sur xslt

questions de débutant sur xslt - XML/XSL - Programmation

Marsh Posté le 04-07-2005 à 15:50:25    

Bonjour, comment je fais pour virer les redondances dans ce code:
 

Code :
  1. <xsl:for-each select="/catalog/cd">
  2. <xsl:sort select="artist" />
  3. <xsl:choose>
  4. <xsl:when test="price &gt; 10">
  5.  <tr class="rouge">
  6.   <td> <xsl:value-of select="title" /> </td>
  7.   <td> <xsl:value-of select="artist" /> </td>
  8.  </tr>
  9. </xsl:when>
  10. <xsl:otherwise>
  11.  <tr class="vert">
  12.    <td> <xsl:value-of select="title" /> </td>
  13.   <td> <xsl:value-of select="artist" /> </td>
  14.  </tr>
  15. </xsl:otherwise>
  16. </xsl:choose>
  17. </xsl:for-each>


 
j'ai essayé avec un template du genre
 

Code :
  1. <xsl:template match="/catalog/cd">
  2. <td> <xsl:value-of select="title" /> </td>
  3. <td> <xsl:value-of select="artist" /> </td>
  4. </xsl:template>


 
puis avec des appels à ce template :

Code :
  1. <xsl:for-each select="/catalog/cd">
  2. <xsl:sort select="artist" />
  3. <xsl:choose>
  4. <xsl:when test="price &gt; 10">
  5.  <tr class="rouge">
  6.       <xsl:apply-templates select="cd" />
  7.                 </tr>
  8. </xsl:when>
  9. <xsl:otherwise>
  10.  <tr class="vert">
  11.       <xsl:apply-templates select="cd" />
  12.  </tr>
  13. </xsl:otherwise>
  14. </xsl:choose>
  15. </xsl:for-each>


 
...mais ca foire, je suis en train de m'initier à XSL donc il est possible que je n'aie pas tout compris [:joce]. Je dois mal m'y prendre [:marc]


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 04-07-2005 à 15:50:25   

Reply

Marsh Posté le 04-07-2005 à 17:37:14    

Bon j'ai contourné en faisant ça:
 

Code :
  1. <xsl:for-each select="/catalog/cd">
  2. <xsl:sort select="artist" />
  3. <xsl:variable name="cdcontent">
  4. <td> <xsl:value-of select="title" /> </td>
  5. <td> <xsl:value-of select="artist" /> </td>
  6. </xsl:variable>
  7. <xsl:choose>
  8. <xsl:when test="price &gt; 10">
  9.  <tr class="rouge">
  10.   <xsl:copy-of select="$cdcontent" />
  11.  </tr>
  12. </xsl:when>
  13. <xsl:otherwise>
  14.  <tr class="vert">
  15.    <xsl:copy-of select="$cdcontent" />
  16.  </tr>
  17. </xsl:otherwise>
  18. </xsl:choose>
  19. </xsl:for-each>


 
Mais dans le principe vous aurez compris ce que je cherchais à faire [:itm]


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 06-07-2005 à 12:11:47    

Regarde un peu xsl:call-template avec un xsl:with-param comme dans cet exemple extrait du MSXML 4.0 SDK
 


  ...
  <xsl:call-template name="localized-message">
    <xsl:with-param name="msgcode">msg23</xsl:with-param>
  </xsl:call-template>
  ...
 
<xsl:template name="localized-message">
  <xsl:param name="msgcode"/>
 
  <!-- code redondant -->
</xsl:template>
 


 
maintenant dans l'exemple que tu donne je vois pas trop l'interêt... en fait tu n'a même pas besoin du xsl:with-param, tu appeles juste un template par son nom avec dedans le code commun.  
 


Message édité par avander le 06-07-2005 à 12:14:11
Reply

Marsh Posté le 11-07-2005 à 09:41:34    

<xsl:for-each select="/catalog/cd">
  <xsl:sort select="artist" />
  <xsl:choose>
    <tr>
      <xsl:attribute name="class">
        <xsl:choose>
          <xsl:when test="price &gt; 10">rouge</xsl:when>
          <xsl:otherwise>vert</xsl:otherwise>
        </xsl:choose>
      </xsl:attribute>
      <td><xsl:value-of select="title" /></td>
      <td><xsl:value-of select="artist" /></td>      
    </tr>
</xsl:for-each>

Reply

Marsh Posté le 11-07-2005 à 09:43:40    

may cay magik [:dawa]

Reply

Sujets relatifs:

Leave a Replay

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