2011-12-12 40 views
2

如何將輸入參數傳遞給XSLT樣式表?我使用的是xsltproc,我想用--stringparam <param> <value>作爲參數,但我不知道如何訪問XSLT中的參數。有人可以舉個例子嗎?提前致謝。xslt中的輸入參數

回答

2

這是我正在使用的一個。默認值部分是可選的。您必須有

<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

您也可以在選擇直接指定默認值:'的' –

3

如何給輸入參數XSLT文件?

在XSLT 可以具有其值所指定的外部,由變換的發起者任何全球參數xsl:param即XSLT樣式表的頂部元素的子元素)。

完成外部參數設置的方式與實現有關,並且因XSLT處理器與另一個XSLT處理器的不同而異 - 請閱讀您正在使用的特定XSLT處理器的文檔。

這裏是一個小例子

<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> 

這裏,命名爲pDeletePosnum元素必須刪除的位置的全局參數。

還有一個default value(3),爲此參數指定。如果轉換的啓動器未指定參數pDeletePos,將使用此值。

當上述變換應用於此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> 

並且如果pDeletePos的值被外部指定爲5,則變換產生以下結果:

<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> 

至於如何設置外部參數,以下是在C#中如何啓動XslCompiledTransform XSLT處理器:

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

+0

很好的回答。它幫助我解決了如何在XSLT文件外部指定參數的問題。 – Anuj