2009-10-22 23 views
0

Est-ce que quelqu'un qui a travaillé avec XSLT peut m'aider à ce sujet? J'utilise la version 1.0 de XSL.Affectation de la valeur du paramètre au xsl: pour chaque

J'ai déclaré un paramètre dans le fichier XSL comme:

<xsl:param name="HDISageHelpPath"/> 

Maintenant, je suis affecter la valeur à ce paramètre à partir d'une page asp. La valeur que j'affecte est "document('../ChannelData/Sage/help/ic/xml/HDI.xml')/HelpFiles/Help". Maintenant, je veux attribuer ce paramètre à la <xsl for each> comme

<xsl:for-each select="msxsl:node-set($HDISageHelpPath)" > (Cela ne fonctionne pas)

Mais cela ne fonctionne pas. J'ai vérifié la valeur du paramètre par le débogage comme ci-dessous

<debug tree="$HDISageHelpPath"> 
    <xsl:copy-of select="$HDISageHelpPath"/> 
</debug> 

Je suis en mesure d'imprimer la valeur et il semble correct. En fait, quand j'attribue le chemin statique ("document('../ChannelData/Sage/help/ic/xml/HDI.xml')/HelpFiles/Help") par codage en dur, il fonctionne

<xsl:for-each select="document('../ChannelData/Sage/help/ic/xml/HDI.xml')/HelpFiles/Help"> (This works) 

Quelqu'un peut-il me s'il vous plaît faire savoir pourquoi attribuer le paramètre à xsl:for-each ne fonctionne pas?

Note: j'ai parlé du site "http://www.dpawson.co.uk/xsl/sect2/N1553.html"

Répondre

0

Vous ne pouvez pas évaluer facilement les chaînes dynamiques comme des expressions XPath dans XSLT 1.0. Ils doivent être codés en dur, normalement.

Il y a EXSLT's dyn:evaluate(), mais je doute que vous puissiez l'utiliser avec le processeur MXSML.

Comme une approche alternative, vous pouvez soit essayer passer le chemin du fichier uniquement:

<xsl:param name="HDISageHelpFilePath"/> 
<!-- ... --> 
<xsl:for-each select="document($HDISageHelpFilePath)/HelpFiles/Help"> 
</xsl:for-each> 

ou en faisant espace réservé, le remplacer par la recherche et de remplacement avant de charger le code XSL réelle dans le processeur (comme un string). C'est un peu brouillon et sujet aux erreurs, mais cela pourrait vous donner la possibilité d'utiliser une expression XPath dynamique.

<xsl:for-each select="%HELP_FILE_XPATH%"> 
</xsl:for-each> 

Chargez le fichier sous forme de texte, remplacez %HELP_FILE_XPATH% avec votre XPath réelle, le nourrir au processeur. Si ça se charge, tout va bien, si ce n'est pas le cas, votre XPath d'entrée est mal formé.

+0

Salut Tomalak, Tout d'abord merci de répondre. Ensuite, je essayé d'utiliser votre première option, mais malheureusement il n'a pas travaillé et a donné l'erreur ci-dessous: Type d'erreur: msxml3.dll (0x80004005) Une référence à une variable ou un paramètre « HDISageHelpFilePath » ne peut pas être résolu. La variable ou le paramètre peut ne pas être défini ou ne pas être inclus dans la portée. – Varun

+0

Ensuite, en ce qui concerne votre deuxième option, je voudrais mentionner que je viens de commencer à travailler sur xsl alors je ne suis pas sûr de quoi parlez-vous. Il serait préférable que nous puissions parler sur votre adresse e-mail personnelle afin que je puisse mieux vous comprendre ... Je suis en ligne sur [email protected] doharey_varun @ hotmail.com Cordialement, Varun Doharey – Varun

+0

J'ai changé le nom du paramètre '' HDISageHelpPath'' en ''HDISageHelpFilePath'' pour souligner que c'est un chemin de fichier, pas un XPath - vous pourriez avoir manqué cela. – Tomalak

Questions connexes