2011-10-04 3 views
0

je le modèle XSLT suivant:Comment sélectionner un élément dans un paramètre de modèle XSLT?

<xsl:template name="foo"> 
    <xsl:param name="arg1">0</xsl:param> 
    <xsl:param name="arg2" /> 
    <xsl:param name="arg3" /> 
    <xsl:call-template name="bar"> 
     <xsl:with-param name="arg1"><xsl:value-of select="$arg1" /></xsl:with-param> 
     <xsl:with-param name="arg2"><xsl:copy-of select="$arg2" /></xsl:with-param> 
     <xsl:with-param name="arg3"><!-- what do I put here? --></xsl:with-param> 
    </xsl:call-template> 
</xsl:template> 

Maintenant arg3 est un xml snippit. Je veux seulement sélectionner un élément dans arg3 pour passer à la barre comme arg3. Comment sélectionner des nœuds individuels à partir d'un paramètre? J'ai essayé, mais ça n'a pas marché.

Veuillez ne pas suggérer d'envoyer la valeur de arg3/qux au lieu de arg3. Il y a une bonne raison à cela, mais cela dépasse le cadre de cette question.

+0

Pouvez-vous élaborer sur _but mais cela n'a pas fonctionné_? Des messages d'erreur ont-ils été donnés? La solution éditée par James Johnson sera probablement ce que vous voulez mais, sans aucun message d'erreur, il est difficile de vous aider. – btlachance

Répondre

1

Cela dépend de ce que l'extrait de code XML ressemble, mais vous pouvez faire quelque chose comme ceci:

<xsl:value-of select="$arg3/first_name" /> 

EDIT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext msxsl"> 

    <xsl:template match="/">    
     <xsl:value-of select="ext:node-set($arg3)/first_name" /> 
    </xsl:template> 

</xsl:stylesheet> 
+0

Que utilisez-vous pour traiter votre XSLT? Java ne semble pas aimer ça. :( –

+0

'' –

+0

Sortir de ma profondeur un peu ici, mais essayez d'utiliser un nœud-set. –

0

juste traiter arg3 $ en tant que nœud, fonctionne pour moi .

<xsl:call-template name="bar"> 
    <xsl:with-param name="arg1"><xsl:value-of select="$arg1" /></xsl:with-param> 
    <xsl:with-param name="arg2"><xsl:copy-of select="$arg2" /></xsl:with-param> 
    <xsl:with-param name="arg3" select="$arg3/sub-node"/> 
</xsl:call-template> 
Questions connexes