[XML/XSL] [WIP] Gestionnaire de liens (1er problème résolu !)

Gestionnaire de liens (1er problème résolu !) [XML/XSL] [WIP] - XML/XSL - Programmation

Marsh Posté le 05-11-2003 à 11:13:09    

Hello !
 
Contexte
 
Je newbise à fond dans le XML/XSL en ce moment. L'idée c'est que j'ai un fichier XML avec des liens. Je veux générer avec PHP un document où je liste les catégories de liens, je peux cliquer sur les catégories pour voir les liens concernés, affichés 5 par 5.
 
Où j'en suis ?
 
Pas très loin :D
 
Pour l'instant, j'arrive à filtrer par catégorie et commencer à afficher les liens à partir d'une variable (en gros afficher les liens de la catégorie X à partir du lien Y).
 
Premier problème (résolu)
 
Je voudrais rajouter une condition pour n'afficher que les liens de 1 à 5 par exemple. Donc j'ai rajouté une variable $fin, mais je n'arrive pas à faire mon test avec 2 conditions... :(
 
Le code
 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <liens>
  3. <categorie id="1">
  4.  <intitule>Categorie 1</intitule>
  5.  <description>Super la catégorie 1 !</description>
  6.  <lien id="1">
  7.   <intituleLien>Premier lien</intituleLien>
  8.   <urlLien>http://www.yahoo.com/1</urlLien>
  9.   <descriptionLien>Il est vraiment super ce premier lien</descriptionLien>
  10.  </lien>
  11.  <lien id="2">
  12.   <intituleLien>Deuxième lien</intituleLien>
  13.   <urlLien>http://www.yahoo.com/2</urlLien>
  14.   <descriptionLien>Il est vraiment super ce Deuxième lien</descriptionLien>
  15.  </lien>
  16.  <lien id="3">
  17.   <intituleLien>Troisième lien</intituleLien>
  18.   <urlLien>http://www.yahoo.com/3</urlLien>
  19.   <descriptionLien>Il est vraiment super ce Troisième lien</descriptionLien>
  20.  </lien>
  21.  <lien id="4">
  22.   <intituleLien>Quatrième lien</intituleLien>
  23.   <urlLien>http://www.yahoo.com/4</urlLien>
  24.   <descriptionLien>Il est vraiment super ce Quatrième lien</descriptionLien>
  25.  </lien>
  26.  <lien id="5">
  27.   <intituleLien>Cinquième lien</intituleLien>
  28.   <urlLien>http://www.yahoo.com/5</urlLien>
  29.   <descriptionLien>Il est vraiment super ce Cinquième lien</descriptionLien>
  30.  </lien>
  31.  <lien id="6">
  32.   <intituleLien>Sixième lien</intituleLien>
  33.   <urlLien>http://www.yahoo.com/6</urlLien>
  34.   <descriptionLien>Il est vraiment super ce Sixième lien</descriptionLien>
  35.  </lien>
  36. </categorie>
  37. <categorie id="2">
  38.  <intitule>Categorie 2</intitule>
  39.  <description>Super la catégorie 2 !</description>
  40.  <lien id="1">
  41.   <intituleLien>Premier lien cat 2</intituleLien>
  42.   <urlLien>http://www.yahoo.com/1</urlLien>
  43.   <descriptionLien>Il est vraiment super ce premier lien</descriptionLien>
  44.  </lien>
  45.  <lien id="2">
  46.   <intituleLien>Deuxième lien cat 2</intituleLien>
  47.   <urlLien>http://www.yahoo.com/2</urlLien>
  48.   <descriptionLien>Il est vraiment super ce Deuxième lien</descriptionLien>
  49.  </lien>
  50. </categorie>
  51. </liens>


 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>
  2. <xsl:stylesheet
  3.   version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  4. <xsl:output method="xml" encoding="ISO-8859-1" indent="yes"/>
  5. <xsl:param name="cat"/>
  6. <xsl:param name="debut"/>
  7. <xsl:param name="fin"/>
  8. <xsl:template match="/">
  9. <html>
  10. <head>
  11.  <title>Liens</title>
  12. </head>
  13. <body>
  14.  <h1><xsl:value-of select="$cat"/> ) <xsl:value-of select="liens/categorie[@id=$cat]/intitule"/></h1>
  15.  <p><em><xsl:value-of select="liens/categorie[@id=$cat]/description"/></em></p>
  16.  <xsl:for-each select="liens/categorie[@id=$cat]/lien">
  17.   <xsl:choose>
  18.   <xsl:when test="@id &gt;= $debut">
  19.   <xsl:value-of select="id"/>
  20.   <h2><a>
  21.             <xsl:attribute name="href"><xsl:value-of select="urlLien"/></xsl:attribute>
  22.             <xsl:value-of select="intituleLien"/>
  23.             </a></h2>
  24.   <p><xsl:value-of select="descriptionLien"/></p>
  25.   </xsl:when>
  26.   </xsl:choose>
  27.  </xsl:for-each>
  28. </body>
  29. </html>
  30. </xsl:template>
  31. </xsl:stylesheet>


 
Je suppose que c'est ici que je dois réussir à indiquer les deux conditions :
 

Code :
  1. <xsl:when test="@id &gt;= $debut">


 
J'ai essayé <xsl:when test="@id &gt;= $debut and @id &lt;= $fin"> ou avec un | d'union mais ça ne marche pas.
 
Des idées ?


Message édité par fastclemmy le 05-11-2003 à 17:16:05
Reply

Marsh Posté le 05-11-2003 à 11:13:09   

Reply

Marsh Posté le 05-11-2003 à 11:43:49    

en passant par une fonction dans laquelle tu poses tes deux conditions :??:
du style :  

Code :
  1. function doubleTest(noeud)
  2. {
  3. if ((noeud.selectSingleNode("./@id" ).text=$debut && ((noeud.selectSingleNode("./@id" ).text=$fin))
  4.  return true;
  5. else
  6.  returne false;
  7. }


et au lieu de ton when un if :

Code :
  1. <xsl:if expr="doubleTest(this);">
  2. ...
  3. </xsl:if>


 
pas du tout testé [:ddr555]


Message édité par walli le 05-11-2003 à 11:44:17

---------------
NP :
Reply

Marsh Posté le 05-11-2003 à 12:32:41    

Je vois le truc, mais je l'insère où et comment la fonction ?

Reply

Marsh Posté le 05-11-2003 à 14:00:22    

la fonction tu l'insères dans ton xsl avant le template

Code :
  1. <xsl:script><![CDATA[
  2. function doubleTest(noeud)
  3.   {
  4.      if ((noeud.selectSingleNode("./@id" ).text=$debut && ((noeud.selectSingleNode("./@id" ).text=$fin))
  5.         return true;
  6.      else
  7.         returne false;
  8.   }
  9.      ]]></xsl:script>


---------------
NP :
Reply

Marsh Posté le 05-11-2003 à 14:05:09    

Warning: domxml_xslt_stylesheet_file(): xsltStylePreCompute: unknown xsl:script in /home/toto/www/tests/xml/index.php on line 7
 
D'après mes quelques recherches c'est pas une fonctionnalité du parsing XML made in Microsoft ? Moi je parse via PHP & DomXML... :/

Reply

Marsh Posté le 05-11-2003 à 14:15:11    

tu peux pas imbriquer tes deux conditions, betement?
<xsl:when test="@id &gt;= $debut">
 <xsl:when test="@id &lt;= $fin">
  ...
 </xsl:when>
</xsl:when>
 
?
 
 
j'ai jamais fait d'xsl, et j'en suis pas fâché


Message édité par the real moins moins le 05-11-2003 à 14:16:54
Reply

Marsh Posté le 05-11-2003 à 14:15:29    

aie... :/
doit y avoir une autre syntaxe alors..


---------------
NP :
Reply

Marsh Posté le 05-11-2003 à 14:32:29    

the real moins moins a écrit :

tu peux pas imbriquer tes deux conditions, betement?
<xsl:when test="@id &gt;= $debut">
 <xsl:when test="@id &lt;= $fin">
  ...
 </xsl:when>
</xsl:when>
 
?
 
 
j'ai jamais fait d'xsl, et j'en suis pas fâché


 
Très bonne idée ! Pas de bol, il ne m'affiche plus rien pour le coup :/

Reply

Marsh Posté le 05-11-2003 à 14:41:26    

et tu es sur que tes params passent bien ?


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 05-11-2003 à 14:58:15    

dans le bouquin qu'on a ici je vois <xsl:if mais pas <xsl:when !?

Reply

Marsh Posté le 05-11-2003 à 14:58:15   

Reply

Marsh Posté le 05-11-2003 à 15:01:12    

the real moins moins a écrit :

dans le bouquin qu'on a ici je vois <xsl:if mais pas <xsl:when !?


 
je plussoie...
par contre, jamais testé l'insertion de variables php dans un fichier xsl.. :/


---------------
NP :
Reply

Marsh Posté le 05-11-2003 à 15:05:17    

ha ok le when est dans un choose; ça doit etre un equivalent de select/case!?

Reply

Marsh Posté le 05-11-2003 à 15:07:55    

à priori ton and devrait marcher: http://www.biglist.com/lists/xsl-l [...] 00496.html

Reply

Marsh Posté le 05-11-2003 à 15:09:23    

sinon tu peux ptet imbriquer un <xsl:if test="2e condition"> dans ton <xsl:when>

Reply

Marsh Posté le 05-11-2003 à 15:11:13    

ah si :  
<xsl:when> est tjs un enfant de <xsl:choose>
un element <xsl:choose> doit contenir au moins un element <xsl:when>
[:boidleau]
par contre c'est forcement une condition booleenne qui est a tester dans le <xsl:when>


---------------
NP :
Reply

Marsh Posté le 05-11-2003 à 15:14:53    

walli a écrit :


 
je plussoie...
par contre, jamais testé l'insertion de variables php dans un fichier xsl.. :/


 
Pourtant ça, ça marche :
http://www.fastclemmy.com/tests/xm [...] =1&debut=2
 
Change cat à 2 et tu verras le contenu de la catégorie 2. Change debut et tu verras s'afficher les liens > $debut.

Reply

Marsh Posté le 05-11-2003 à 15:15:32    

Reply

Marsh Posté le 05-11-2003 à 15:15:38    

fastclemmy a écrit :


 
Pourtant ça, ça marche :
http://www.fastclemmy.com/tests/xm [...] =1&debut=2
 
Change cat à 2 et tu verras le contenu de la catégorie 2. Change debut et tu verras s'afficher les liens > $debut.


 
je voulais pas dire que ca marchait pas, juste que je connaissais pas la syntaxe ;)


---------------
NP :
Reply

Marsh Posté le 05-11-2003 à 15:18:13    

the real moins moins a écrit :

sinon tu peux ptet imbriquer un <xsl:if test="2e condition"> dans ton <xsl:when>


 
Bien joué ! Ca marche !
http://www.fastclemmy.com/tests/xm [...] ut=2&fin=3
 
Marchi beaucoup pour votre persévérance ! [:fastclemmy]

Reply

Marsh Posté le 05-11-2003 à 15:18:55    

fastclemmy a écrit :


 
N'affiche rien [:ruisseau de larmes]

ha bah ok mais dans ce cas, c'est ton test qu'est pas bon, ou bien tes valeurs... (désolé j'avais pas  bien capté), sinon t'aurais un msg d'erreur..

Reply

Marsh Posté le 05-11-2003 à 15:20:32    

fastclemmy a écrit :


 
Bien joué ! Ca marche !
http://www.fastclemmy.com/tests/xm [...] ut=2&fin=3
 
Marchi beaucoup pour votre persévérance ! [:fastclemmy]  

ha ben ok
c etrange, le and devrait pourtant marcher.

Reply

Marsh Posté le 05-11-2003 à 15:20:53    

enfin, je dis ça, j'en sais rien, j'ai jamais fait d'xsl, mais d'apres ce que j'ai lu en vitesse..

Reply

Marsh Posté le 05-11-2003 à 15:24:42    

Je confirme le 'and' doit marcher, utilisé avec MSXML 3.0!

Reply

Marsh Posté le 05-11-2003 à 15:29:22    

Avander a écrit :

Je confirme le 'and' doit marcher, utilisé avec MSXML 3.0!


 
Oui mais comme je disais plus haut, je n'utilise pas MSXML, je parse côté serveur avec domXML, peut-être que ce n'est pas supporté ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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