Passage de paramètre à for each en xslt

Passage de paramètre à for each en xslt - XML/XSL - Programmation

Marsh Posté le 30-08-2009 à 11:49:11    

Bonjour,
 
Après avoir longuement cherché sur internet, j'en viens à votre aide.....
Je n'arrive pas à faire passer un paramètre dans un for-each select. ($DEL)
Si je fais un <xsl:value-of select="$DEL"/> cela fonctionne.
Mais impossible de récupérer cette valeur dans mon for-each.
Voici le début de mon code:
 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" encoding="utf-8"/>
  <xsl:param name="DEL" select="sitraEVE386630"/>
  <xsl:template match="/">
<xsl:for-each select="ListeOI/OI/DublinCore/identifier[.!='$DEL']">
      <xsl:variable name="n"> <xsl:value-of select="position()"/> </xsl:variable>
      <a>
      <xsl:attribute name="name"><xsl:value-of select="$n"/> </xsl:attribute>
      </a>
 
J'espère que vous pourrez m'éclairer sur ce problème.
 
Merci par avance.

Reply

Marsh Posté le 30-08-2009 à 11:49:11   

Reply

Marsh Posté le 30-08-2009 à 13:28:48    

Vraiment personne n'a été confronté à ce problème?
Un grand grand merci par avance

Reply

Marsh Posté le 30-08-2009 à 13:59:44    

Rien compris perso, il n'y a pas besoin de faire passer de paramètre à un for-each dans la mesure où il a accès à toute la scope de sa template (la seule altération étant le paramètre implicite "." )


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

Marsh Posté le 30-08-2009 à 14:08:17    

masklinn a écrit :

Rien compris perso, il n'y a pas besoin de faire passer de paramètre à un for-each dans la mesure où il a accès à toute la scope de sa template (la seule altération étant le paramètre implicite "." )


 
En fait je passe un parametre qui vient d'un autre fichier xml.
Ce paramètre me sert à supprimer des éléments obsolètes de mon for-each.
 
Pour résumer, j'ai un fichier liste.xml qui contient mes éléments à afficher
et un fichier del.xml qui contient les éléments obsolètes (par rapport à une date).
Je récupère donc  la liste du del.xml que je viens intégrer en param dans mon liste.xsl.
Le problème est que mon param n'est pas interprété dans mon for-each...
 
Ai-je été plus clair?
 
Merci par avance

Reply

Marsh Posté le 30-08-2009 à 15:04:42    

Vraiment personne n'est en mesure de me répondre?

Reply

Marsh Posté le 04-09-2009 à 10:13:45    

Je comprends rien à ton truc non plus...

 

2-3 trucs :

  • les for-each en général on évite, on spécialise les templates plutôt
  • faut bien distinguer <xsl:variable name="temp" select="data/row"/> et <xsl:variable name="temp">data/row</xsl:variable> que tu utiliserais après pour un select=$temp. Dans le premier cas $temp est un 'result tree fragment', qui sera convertit en node-set si tu fais un for-each dessus par exemple (donc tu peux faire ton for-each). Dans le deuxième cas c'est une string, et ça ne sera jamais convertit en node-set (tu ne pourras pas faire ton for-each)



Message édité par Xavier_OM le 04-09-2009 à 10:16:43

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 04-09-2009 à 10:25:50    

En fait j'ai deux flux xml.
1er flux xml: il contient les infos des offices de tourisme que j'exploite et notamment une balise qui sert d'id propre à chaque info
2eme flux xml: il contient uniquement l'id des infos qui ne sont plus valides parce que evenement passé.
Mon but est donc de ne plus afficher les infos périmées du flux xml1 en fonction des id présentes dans le xml2.
L'élément commun est donc l'id qui est présente ds xml 1 et xml2.
 
Merci par avance pr votre aide

Reply

Marsh Posté le 04-09-2009 à 14:02:21    

Le template qui match les infos périmées de xml1 est un truc du genre :
 
<xsl:template match='id = exslt:node-set(document("xml2.xml" ))/path/to/id'>
    <ici on affiche>
</xsl:template>
 


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Sujets relatifs:

Leave a Replay

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