Salut tout le monde, j'ai encore un petit problème avec xslt, le but de mon programme est de selectionner des parties de mon fichier XML d'entrée, avec quelques conditions, ça je sais le faire à présent Smiley lol , par contre je suis oubligé de revenir à ma feuille de style à chaque fois pour modéfier des valeurs et je veux les passé en parametres avec la commande xsltproc, mais ça parcontre je ne sais pas encore le faire [ Smiley decu .
voici une partie de mon xslt:

<xsl:template match="//Instance[@id='inst1798736']">
     <xsl:copy-of select="."/>
</xsl:template>

<xsl:template match="//Instance[@id='XXX']">
     <xsl:copy-of select="."/>
</xsl:template>

<xsl:template match="//Part[@id='id14']">
     <Part id="id14" name="2_Cylinder_Engine" type="assembly">
          <xsl:attribute name="instanceRefs">
               <xsl:text>XXX</xsl:text>
          </xsl:attribute>
     </Part>
</xsl:template>

<xsl:template match="//Part[@id='YYY']">
     <xsl:copy-of select="."/>
</xsl:template>


est donc, le but est de passé en parametre les valeurs "XXX" et "YYY", je sais que c'est avec <xsl:param name"?"/>, mais je ne sais pas comment faire.
J'attend votre aide. Merci d'avance Smiley ravi

aadariom
Modifié par aadari (05 Oct 2007 - 14:43)
Salut,

Très interessant Smiley eek , par contre moi c'est pas un parametre mais deux, et je veux récuperer le paramétre pour faire quelque chose après (copy-of) Smiley ohwell si tu veut mon probleme c'est pas <xsl:param>, mais comment dire que la valeur de mon parametre est celle que je donne en ligne de commande "xsltproc" quand je veux crée mon fichier resultat.

Merci d'avance Smiley cligne
Modérateur
Salut,

Je ne suis pas sûr de bien comprendre ton problème... Smiley sweatdrop

Dans l'exemple que j'avais donné, le paramètre "montant" était récupéré après la transmission de cette donnée via un formulaire, par exemple. Admettons qu'on avait un champ texte dans lequel on mettait 10, cette valeur s'inscrivait dans la page résultante puisque le xsl:value-of prenait la valeur 10.

Après, ce n'est qu'un exemple mais le paramètre peut provenir d'une bdd, d'un fichier xml, d'une quelconque action de l'utilisateur ou quoi que ce soit d'autre. La partie xslt est indépendante de la manière dont le paramètre est transmis ; tout ce qu'elle fait, c'est remplacer le paramètre par la valeur. Donc, que ce soit pour un xsl:copy-of ou autre chose, ça ne change rien.

Si tu as plusieurs paramètres, il suffit juste de les intégrer dans le tableau php (dans l'exemple -> $tab). Ca donnerait quelquechose comme suit :
$tab = array(
	'xml' => 'index.xml',
	'xsl' => 'index.xsl'
	'param1' => 'valeur1',
	'param2' => 'valeur2'
);

<xsl:param name="param1"/>
<xsl:param name="param2"/>
...
<xsl:template match="$param1">
     <xsl:copy-of select="$param2"/>
</xsl:template>
Smiley biggol Oui, je me suis mal exprimé, pour définir les paramètres je les déja fait, mais mon vrai problème, c'est que moi je n'utilise pas php (même si je voulai je ne pourai pas Smiley rolleyes ) en plus je travail avec LINUX et j'utilise une commande pour générer mon fichier résultat "xsltproc", et avec cette commande je donne le fichier source XML la feuille de style XSLT, et je peux aussi mettres des paramètres, et donc mon souci c'est; dans le fichier xsl, comment dire que mes paramètres sont ceux de ma ligne de commande ????

autre chose, vue que j'ai pas résultat, je ne sais pas si ce que j'ai fait est correct par rapport aus paramètres, voici une partie de mon xslt:



<xsl:param name="inst"/>
<xsl:param name="id"/>
...
<xsl:template match="//Instance[@id='$inst']">
<xsl:copy-of select="."/>
</xsl:template>
...
<xsl:attribute name="instanceRefs">
<<xsl:text>$inst</xsl:text>
</xsl:attribute>
 ...


Si tu peux regarder STP Smiley decu
Modifié par aadari (05 Oct 2007 - 12:35)
Modérateur
Au sujet de ta syntaxe, ce serait plutôt :
<xsl:param name="inst"/>
<xsl:param name="id"/>
...
<xsl:template match="//Instance[@id=$inst]">
    <xsl:copy-of select="."/>
</xsl:template>
...
<xsl:attribute name="instanceRefs">
    <xsl:text>$inst</xsl:text>
</xsl:attribute>
 ...
et pour passer un paramètre avec xsltproc, il faut ajouter à ta ligne de commande :
--param [i]nom valeur[/i]
ou
--stringparam [i]nom valeur[/i]
si la valeur est une chaine de caractères (en UTF-8)...

... sachant que tu peux ajouter jusqu'à 32 couples.

Voir ici : http://www.delafond.org/traducmanfr/man/man1/xsltproc.1.html
Modifié par koala64 (05 Oct 2007 - 13:35)
Merci, c'est résoulu j'avais un problème de syntaxe param (que tu ma corigé Smiley smile ) sinon pour xsltproc je connai la syntaxe.
Merci beaucoup Smiley ravi