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

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

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