Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1838 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  compter le nombre de passage dans un if

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

compter le nombre de passage dans un if

n°1355721
amiga56
Posté le 28-04-2006 à 09:35:34  profilanswer
 

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.
 

mood
Publicité
Posté le 28-04-2006 à 09:35:34  profilanswer
 

n°1356730
amiga56
Posté le 30-04-2006 à 13:00:17  profilanswer
 

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

n°1356744
rx__
Paint It Black
Posté le 30-04-2006 à 13:41:50  profilanswer
 

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.

n°1356794
amiga56
Posté le 30-04-2006 à 16:16:46  profilanswer
 

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
n°1357307
amiga56
Posté le 01-05-2006 à 19:09:42  profilanswer
 

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>


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  compter le nombre de passage dans un if

 

Sujets relatifs
variables externes : passage en membres ou argument de methodes ?Passage du HTML au XHTML / CSS, quelque petits soucis...
[Delphi]Limiter le nombre de ligne dans un Memo ?[VB.NET] Passage de valeurs entre fenêtres fille/mère
filtre excel avec un nombre de critères superieure à 2[Flash] Problème cadre au passage de la souris
[Résolu] Changement de couleur au passage de la sourisJSP/JSTL et passage de variables...(débutant)
compter chaine1 dans chaine2inserer un nombre finis d'image dans un dialog box
Plus de sujets relatifs à : compter le nombre de passage dans un if


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR