2013-03-19 61 views
1

它们如何存储在转换中?通过xsltApplyStylesheet传入的参数

除了使用“$ variable”之外,我如何访问它们。我可以通过他们的名字访问他们吗?

<xsl:value-of select = '*/*/xsl:param[@name=myvariable']/@select"/> 

回答

1

不,参数不能动态地名称访问,但如果你使用的是支持the node-set() function XSLT处理器,你可以在地图像这样成立排序访问他们的名字:

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

    <xsl:variable name="paramsFragment"> 
    <item name="myParam1"> 
     <xsl:copy-of select="$myParam1"/> 
    </item> 
    <item name="myParam2"> 
     <xsl:copy-of select="$myParam2"/> 
    </item> 
    </xsl:variable> 
    <xsl:variable name="params" select="msxsl:node-set($paramsFragment)/*" /> 

    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
    <xsl:value-of select="$params[@name = 'myParam2']"/> 

    <xsl:variable name="paramName" select="'myParam1'" /> 
    <xsl:value-of select="$params[@name = $paramName]"/> 
    </xsl:template> 
</xsl:stylesheet> 
+0

有没有办法看到在xslt文件中传入的变换参数? – user2184503 2013-03-19 02:54:47

+0

你应该能够使用'boolean($ myParam1)'来测试一个参数是否被指定(除非你会传递一个布尔值),或者使用上面的方法,你应该能够测试'boolean ($ params [@name ='paramName']/node())' – JLRishe 2013-03-19 03:33:13

0

参数值的动态生成只能通过参数引用访问(使用'$'paramName语法)。

从由OP做了点评:

有没有办法看到,而XSLT文件里面有什么参数传递到 转型?

是的,有这样的方式,可以是成功的,在很大程度上

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:param name="pmyParam1" select="-999999999999999"/> 

<xsl:template match="/"> 
    <xsl:if test="not($pmyParam1 = '-999999999999999')"> 
    $pmyParam1 has a non-default value -- was definitely set from outside ! 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

变换上面指定的默认值的参数值进行比较。如果两个值不同,则表示已传递外部值。如果不是,我们不能得出一个肯定的结论。然而,如果将默认值仔细选择为非常独特且非常不可能使转化的发起者知道的事物,那么实际值和默认值是相同的这一事实,强烈地暗示了外部调用者没有为该参数指定一个值。