compter le nombre de passage dans un if

compter le nombre de passage dans un if - XML/XSL - Programmation

Marsh Posté le 28-04-2006 à 09:35:34    

Je veux compter le nombre de passage dans un xsl qui me crée des entrée dans un menu :
 
<xsl:if test="extension[.='sxw'] or extension[.='sdw']  or extension[.='odt'] or extension[.='sdw'] or extension[.='pdf']" >    
  <LI><a href="file:///{translate(fullname,'\','/')}" target="main"><xsl:value-of select="$nom"/></a></LI>
</xsl:if>
 
Mon probléme est que je dois éviter des menu vide, il faut donc que j'anticipe.
 
J'ai deja tenter de faire un compteur, mais je n'ai pas reussis.
 

Reply

Marsh Posté le 28-04-2006 à 09:35:34   

Reply

Marsh Posté le 30-04-2006 à 13:00:17    

Je bloque toujours
 
ce qui pourait marcher ce serait d'ajouter un caractére quelconque à une chaine de caractére vide au debut
 
à la fin je compte le nombre de caractére si = 0 => c'est un menu vide
 
en pratique je n'y arrive pas

Reply

Marsh Posté le 30-04-2006 à 13:41:50    

Je ne comprends pas trop ce que tu veux faire mais n'oublie pas qu'il y a une fonction count() pour compter le nombre d'éléments et attributs qui satisfont à une expression xpath.

Reply

Marsh Posté le 30-04-2006 à 16:16:46    

c'est bien la le probleme, j'ai bien testé count() mais je n'y arrive pas
 
mon fichier xml est de ce type, c'est en fait le listing d'une partie de mon disque dur :
 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>
  2. <!-- Created with Catalogue version 4.2.3 [Soft Experience] -->
  3. <involume name="DATA2" filesystem="NTFS" dategeneration = "30 Avril 2006 16:05">
  4. <dir>
  5. <id>1</id><name>dir</name><fullname>l:\Temp\Temp\test\dir</fullname>
  6. <dir>
  7. <id>2</id><name>dir1</name><fullname>l:\Temp\Temp\test\dir\dir1</fullname>
  8. <file>
  9. <id>3</id>
  10. <extension>xml</extension>
  11. <name>Catalogue.xml</name>
  12. <fullname>l:\Temp\Temp\test\dir\dir1\Catalogue.xml</fullname>
  13. <shortname>CATALO~1.XML</shortname>
  14. </file>
  15. </dir>
  16. <dir>
  17. <id>4</id><name>dir2</name><fullname>l:\Temp\Temp\test\dir\dir2</fullname>
  18. <dir>
  19. <id>5</id><name>dir21</name><fullname>l:\Temp\Temp\test\dir\dir2\dir21</fullname>
  20. <file>
  21. <id>6</id>
  22. <extension>xsl</extension>
  23. <name>liste imbriquée.xsl</name>
  24. <fullname>l:\Temp\Temp\test\dir\dir2\dir21\liste%20imbriquée.xsl</fullname>
  25. <shortname>LISTEI~1.XSL</shortname>
  26. </file>
  27. <file>
  28. <id>7</id>
  29. <extension>xsl</extension>
  30. <name>liste simple.xsl</name>
  31. <fullname>l:\Temp\Temp\test\dir\dir2\dir21\liste%20simple.xsl</fullname>
  32. <shortname>LISTES~1.XSL</shortname>
  33. </file>
  34. </dir>
  35. <dir>
  36. <id>8</id><name>dir22</name><fullname>l:\Temp\Temp\test\dir\dir2\dir22</fullname>
  37. <file>
  38. <id>9</id>
  39. <extension>htm</extension>
  40. <name>accueil.htm</name>
  41. <fullname>l:\Temp\Temp\test\dir\dir2\dir22\accueil.htm</fullname>
  42. <shortname>accueil.htm</shortname>
  43. <html><title>Document sans nom</title></html>
  44. </file>
  45. <file>
  46. <id>10</id>
  47. <extension>htm</extension>
  48. <name>index.htm</name>
  49. <fullname>l:\Temp\Temp\test\dir\dir2\dir22\index.htm</fullname>
  50. <shortname>index.htm</shortname>
  51. <html><title>Document sans nom</title></html>
  52. </file>
  53. <file>
  54. <id>11</id>
  55. <extension>htm</extension>
  56. <name>menu.htm</name>
  57. <fullname>l:\Temp\Temp\test\dir\dir2\dir22\menu.htm</fullname>
  58. <shortname>menu.htm</shortname>
  59. <html><title>Test de menu dynamique</title></html>
  60. </file>
  61. <file>
  62. <id>12</id>
  63. <extension>htm</extension>
  64. <name>titre.htm</name>
  65. <fullname>l:\Temp\Temp\test\dir\dir2\dir22\titre.htm</fullname>
  66. <shortname>titre.htm</shortname>
  67. <html><title>Document sans nom</title></html>
  68. </file>
  69. </dir>
  70. </dir>
  71. <dir>
  72. <id>13</id><name>dir3</name><fullname>l:\Temp\Temp\test\dir\dir3</fullname>
  73. <file>
  74. <id>14</id>
  75. <extension>class</extension>
  76. <name>Outline.class</name>
  77. <fullname>l:\Temp\Temp\test\dir\dir3\Outline.class</fullname>
  78. <shortname>OUTLIN~1.CLA</shortname>
  79. </file>
  80. </dir>
  81. </dir>
  82. </involume>


 
pour l'instant mon xsl :
 

Code :
  1. <?xml version="1.0"?>
  2. <xsl:stylesheet version="1.0"
  3.     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  4. <xsl:output method="xml" indent="yes" omit-xml-declaration ="yes" encoding="ISO-8859-1"/>
  5. <xsl:template name="DonneDernier">
  6.     <xsl:param name="str" />
  7.     <xsl:param name="current" select="0" />
  8.      <xsl:choose>
  9.         <xsl:when test="contains($str, '\')">
  10.   <xsl:call-template name="DonneDernier">
  11.                 <xsl:with-param name="str" select="substring-after($str, '\')" />
  12.                 <xsl:with-param name="current" select="$current + 1" />
  13.   </xsl:call-template>
  14.         </xsl:when>
  15.         <xsl:otherwise><xsl:value-of select="$str" /></xsl:otherwise>
  16.     </xsl:choose>
  17. </xsl:template>
  18.  
  19. <xsl:template name="tRec">
  20.         <xsl:param name="x"/>
  21.         <xsl:if test="x &lt; 10">
  22.                 <xsl:call-template name="tRec">
  23.                         <xsl:with-param name="x" select="$x + 1"/>
  24.                 </xsl:call-template>
  25.         </xsl:if>
  26.         <xsl:if test="x &gt;= 10"><xsl:value-of select="$x"/></xsl:if>
  27. </xsl:template>
  28. <xsl:template match="/">
  29. <HTML><HEAD> <TITLE>Liste</TITLE>
  30. <LINK REL="stylesheet" TYPE="text/css" HREF="list.css" /></HEAD>
  31. <BODY BACKGROUND="../fond_07.gif" BGCOLOR="#FFFFFF" TEXT="#FFB509" LINK="#FFFFFF" VLINK="#00FFFF" ALINK="#FFFFFF" >
  32. <applet code="Outline" width="250" height="700">Menu :<BR/>
  33.   <UL><xsl:apply-templates select="involume/dir" /></UL>
  34. </applet></BODY></HTML>
  35. </xsl:template>
  36. <xsl:template match="dir">
  37. <xsl:variable name="node">
  38.   <xsl:call-template name="DonneDernier">
  39.         <xsl:with-param name="str" select="fullname" />
  40.     </xsl:call-template>
  41. </xsl:variable>
  42. <LI><xsl:value-of select="$node"/></LI>
  43.    <UL><!-- <xsl:value-of select="count(following-sibling::file)" /> -->
  44. <xsl:for-each select="file">
  45.   <xsl:value-of select="count(following-sibling::file)+1" />
  46.    <xsl:variable name="nom">
  47.        <xsl:call-template name="DonneDernier">
  48.              <xsl:with-param name="str" select="fullname" />
  49.          </xsl:call-template>
  50.    </xsl:variable>
  51. <xsl:if test="extension[.='sxw'] or extension[.='sdw']  or extension[.='odt'] or extension[.='sdw'] or extension[.='pdf'] or extension[.='jpg'] or extension[.='png'] or extension[.='SLDPRT'] or extension[.='SLDASM'] or extension[.='doc'] or extension[.='txt'] or extension[.='sdc']" >
  52.  <LI><a href="file:///{translate(fullname,'\','/')}" target="main"><xsl:value-of select="$nom"/></a></LI>
  53. </xsl:if>
  54.  </xsl:for-each>
  55.    <xsl:if test="dir"><xsl:apply-templates select="dir"/></xsl:if>
  56.    </UL>
  57. </xsl:template>
  58. </xsl:stylesheet>


 
me donne le html suivant :
 

Code :
  1. <HTML><HEAD>
  2. <TITLE>Liste</TITLE>
  3. <LINK REL="stylesheet" TYPE="text/css" HREF="list.css" /></HEAD>
  4. <BODY BACKGROUND="../fond_07.gif" BGCOLOR="#FFFFFF" TEXT="#FFB509" LINK="#FFFFFF" VLINK="#00FFFF" ALINK="#FFFFFF">
  5. <applet code="Outline" width="250" height="700">Menu :<BR />
  6. <UL><LI>dir</LI>
  7. <UL>
  8. <LI>dir1</LI>
  9. <UL>1</UL>
  10. <LI>dir2</LI>
  11. <UL>
  12. <LI>dir21</LI>
  13. <UL>21</UL>
  14. <LI>dir22</LI>
  15. <UL>4321</UL>
  16. </UL>
  17. <LI>dir3</LI>
  18. <UL>1</UL>
  19. </UL>
  20. </UL>
  21. </applet></BODY></HTML>


 
fichier qui me sert à créer automatiquement un menu avec des lien vers les fichiers de mon disque dur, ça marche bien sauf pour les répertoires vides (ou qui ne contiennent pas de fichiers de type bureautique, en gros), il faut donc que j'arrive a détecter le nombre de passage dans la partie du xsl suivante :
 
<

Code :
  1. xsl:if test="extension[.='sxw'] or extension[.='sdw']  or extension[.='odt'] or extension[.='sdw'] or extension[.='pdf'] or extension[.='jpg']  ... " >
  2.    <LI><a href="file:///{translate(fullname,'\','/')}" target="main"><xsl:value-of select="$nom"/></a></LI>
  3. </xsl:if>


 
pour l'instant je n'y arrive pas


Message édité par amiga56 le 30-04-2006 à 16:23:09
Reply

Marsh Posté le 01-05-2006 à 19:09:42    

probleme resolu avec count
 
le bout de code (template modifié)
 

Code :
  1. <xsl:template match="dir">
  2. <xsl:variable name="node">
  3.   <xsl:call-template name="DonneDernier"><xsl:with-param name="str" select="fullname" /></xsl:call-template>
  4. </xsl:variable>
  5. <xsl:variable name="vide">vide.htm</xsl:variable>
  6. <LI><xsl:value-of select="$node"/></LI>
  7.    <UL>
  8.  
  9. <xsl:choose>
  10. <xsl:when test="count(file[contains(.,'.sxw')])+count(file[contains(.,'.odt')])+count(file[contains(.,'.sdw')])+count(file[contains(.,'.pdf')])+count(file[contains(.,'.SLDPRT')])+count(file[contains(.,'.SLDASM')])+count(file[contains(.,'.doc')])+count(file[contains(.,'.txt')])+count(file[contains(.,'.sdc')])+count(file[contains(.,'.htm')])+count(file[contains(.,'.html')])!=0"> 
  11. <xsl:for-each select="file">
  12.  <xsl:variable name="nom">
  13.      <xsl:call-template name="DonneDernier"><xsl:with-param name="str" select="fullname" /></xsl:call-template>
  14.  </xsl:variable>
  15. <xsl:if test="extension[.='sxw'] or extension[.='sdw']  or extension[.='odt'] or extension[.='pdf'] or extension[.='SLDPRT'] or extension[.='SLDASM'] or extension[.='doc'] or extension[.='txt'] or extension[.='sdc'] or extension[.='htm'] or extension[.='html']" >
  16.   <LI><a href="file:///{translate(fullname,'\','/')}" target="main"><xsl:value-of select="$nom"/></a></LI>
  17. </xsl:if>
  18.  </xsl:for-each>
  19. </xsl:when>
  20. <xsl:otherwise>
  21. <LI><a href="{$vide}" target="main"><xsl:value-of select="$vide"/></a></LI>
  22. </xsl:otherwise>
  23. </xsl:choose>
  24.    <xsl:if test="dir"><xsl:apply-templates select="dir"/></xsl:if>
  25.    </UL>
  26. </xsl:template>

Reply

Sujets relatifs:

Leave a Replay

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