2011-12-12 2 views
2

Comment transmettre un paramètre d'entrée à une feuille de style XSLT? J'utilise xsltproc, et je voudrais utiliser --stringparam <param> <value> comme argument, mais je ne sais pas comment accéder au paramètre à l'intérieur du XSLT. Quelqu'un peut-il donner un exemple? Merci d'avance.Paramètre d'entrée dans xslt

Répondre

2

J'utilise celui-ci. La partie de valeur par défaut est facultative. Vous devez avoir un

<xsl:param name="yourParamname"/> 

.

<?xml version="1.0"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<!-- default value --> 
<xsl:variable name="defaultDeploymentMode"> 
    <xsl:text>test</xsl:text> 
</xsl:variable> 
<xsl:param name="deploymentMode" select="$defaultDeploymentMode"></xsl:param> 



<xsl:template match="/"> 
    <data><xsl:value-of select="$deploymentMode"/> 
      </data> 
    </xsl:template> 
+1

Vous pouvez également spécifier la valeur par défaut directement dans la sélection: '' –

3

Comment donner paramètre d'entrée à un fichier xslt?

Dans XSLT un paramètre global (xsl:param qui est un enfant de l'élément supérieur de la feuille de style XSLT) peut avoir sa valeur spécifiée en externe, par l'initiateur de la transformation.

La façon dont ce paramètre des paramètres externes est effectué dépend de l'implémentation et diffère d'un processeur XSLT à un autre - lisez la documentation du processeur XSLT spécifique que vous utilisez.

Voici un petit exemple:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:param name="pDeletePos" select="3"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="num"> 
    <xsl:if test="not(position() = $pDeletePos)"> 
    <xsl:copy-of select="."/> 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

Ici, le paramètre global nommé pDeletePos la position de l'élément num qui doit être supprimé. Il existe également un default value (3), spécifié pour ce paramètre. Cette valeur sera utilisée si l'initiateur de la transformation ne spécifie pas le paramètre pDeletePos.

Lorsque la transformation ci-dessus est appliquée sur ce document XML:

<nums> 
    <num>01</num> 
    <num>02</num> 
    <num>03</num> 
    <num>04</num> 
    <num>05</num> 
    <num>06</num> 
    <num>07</num> 
    <num>08</num> 
    <num>09</num> 
    <num>10</num> 
</nums> 

et si la valeur de l'pDeletePos est externe spécifié comme 5, puis la transformation produit le résultat suivant:

<nums> 
    <num>01</num> 
    <num>02</num> 
    <num>03</num> 
    <num>04</num> 
    <num>06</num> 
    <num>07</num> 
    <num>08</num> 
    <num>09</num> 
    <num>10</num> 
</nums> 

Pour définir le paramètre de manière externe, voici comment cela se fait en C#, lors de l'initialisation du processeur XSLT XslCompiledTransform:

http://msdn.microsoft.com/en-us/library/system.xml.xsl.xsltargumentlist.addparam.aspx

+0

Bonne réponse. Cela m'a aidé avec mon problème de comment spécifier un paramètre en externe à un fichier XSLT. – Anuj

Questions connexes