Problème de paramètre vers une XSL

Problème de paramètre vers une XSL - XML/XSL - Programmation

Marsh Posté le 06-03-2010 à 10:45:24    

J'ai un fichier XML et une XSL que j'utilise via PHP.
Je passe des parametres à la feuille XSL, je les affiches et voit bien leur valeur, mais dans le select que je veux modifier il m'affiche toutes mes pages :(
le code est plus parlant :)
PS : j'ai fait de l'élagage pour ne garder que ce qui est utile.
le XML

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <categories>
  3.    <cat id="accueil" label="Accueil">
  4.        <page type="edito" background="/img/backgrounds/bg1.jpg">
  5.            <headcustom>
  6.                <![CDATA[
  7.                 <script type="text/javascript">
  8.                     //this is custom code
  9.                 </script>
  10.                 ]]>
  11.            </headcustom>
  12.            <title>
  13.                <![CDATA[this is edito1]]>
  14.            </title>
  15.            <text>
  16.                <![CDATA[this is the text]]>
  17.            </text>
  18.        </page>
  19.        <page type="edito">
  20.            <title>
  21.                <![CDATA[this is accueil edito2]]>
  22.            </title>
  23.            <text>
  24.                <![CDATA[this is the text]]>
  25.            </text>
  26.        </page>
  27.        <page type="edito">
  28.            <title>
  29.                <![CDATA[this is accueil edito3]]>
  30.            </title>
  31.            <text>
  32.                <![CDATA[this is the text]]>
  33.            </text>
  34.        </page>
  35.    </cat>
  36.    <cat id="carres" label="Les carrés">
  37.        <page type="edito">
  38.            <title>
  39.                <![CDATA[this is carres edito1]]>
  40.            </title>
  41.            <text>
  42.                <![CDATA[this is the text of carrés]]>
  43.            </text>
  44.        </page>
  45.         <page type="edito">
  46.            <title>
  47.                <![CDATA[this is carres edito2]]>
  48.            </title>
  49.            <text>
  50.                <![CDATA[this is the text of carrés]]>
  51.            </text>
  52.        </page>
  53.    </cat>
  54.    <cat id="papeterie" label="Papeterie">
  55.        <page type="edito">
  56.            <title>
  57.                <![CDATA[this is papeterie edito1]]>
  58.            </title>
  59.            <text>
  60.                <![CDATA[this is the text of papier]]>
  61.            </text>
  62.        </page>
  63.    </cat>
  64. </categories>
 

et la XSL

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0"
  3.     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  4.     <xsl:output method="xml" indent="yes" encoding="UTF-8"
  5.         doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
  6.         doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  7.         omit-xml-declaration="yes"
  8.         />
  9.  
  10.     <xsl:param name="catid"/>
  11.     <xsl:param name="pagenum"/>
  12.  
  13.     <xsl:template match="/">
  14.         <xsl:value-of select="$catid"/>
  15.         <xsl:value-of select="$pagenum"/>
  16.         <xsl:variable name="cat" select="descendant::cat[@id=$catid]"/>
  17.         <html dir="ltr" lang="fr-FR">
  18.             <head>
  19.             
  20.             </head>
  21.             <body>
  22.                 <div id="wrapper">
  23.                     <div id="content">
  24.                         <xsl:apply-templates select="descendant::cat[@id=$catid]/page[$pagenum]" />
  25.                     </div>
  26.                 </div>
  27.             </body>
  28.         </html>
  29.     </xsl:template>
  30.     <xsl:template match="page">
  31.             <xsl:value-of select="title" />
  32.     </xsl:template>
  33. </xsl:stylesheet>


ça merde sur cette ligne :

Code :
  1. <xsl:apply-templates select="descendant::cat[@id=$catid]/page[$pagenum]" />


avant j'avais

Code :
  1. <xsl:apply-templates select="descendant::cat[@id=$catid]/page" />


cela permettait d'attaquer tous les noeuds <page> du XML
maintenant je ne veux afficher qu'une seule page, en fonction de l'id que j'aurai passé. Mais ça ne marche pas
pourtant si je fais :

Code :
  1. <xsl:apply-templates select="descendant::cat[@id=$catid]/page[1]" />


j'ai bien la page 1, si je met un 2, j'ai bien la page 2
qu'est ce que j'ai loupé :'( :'(


Message édité par gatsu35 le 06-03-2010 à 11:04:01

---------------
Blablaté par Harko
Reply

Marsh Posté le 06-03-2010 à 10:45:24   

Reply

Marsh Posté le 06-03-2010 à 12:32:41    

descendant::cat[@id=$catid]/page[position()=$pagenum]
 
La partie que t'as loupé, c'est que $pagenum est une chaîne de caractères, pas un entier (et dans tous les cas, je ne suis pas persuadé que [] puisse prendre juste une variable, même si c'est un entier, à vérifier)
 
accessoirement, tu peux templacer tes descendant:: par .//, et comme . est /, tu peux juste écrire //cat[@id....
 
Et comme tu définis <xsl:variable name="cat" select="//cat[@id=$catid]"/>
 
beh en dessous tu peux écrire $cat/page[position()=$pagenum]


Message édité par masklinn le 06-03-2010 à 12:47:54

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Sujets relatifs:

Leave a Replay

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