通过xsltApplyStylesheet传入的参数

时间:2013-03-19 02:14:37

标签: xml xslt

它们如何存储在转型中?

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

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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>

上面的转换将参数值与指定的默认值进行比较。如果两个值不同,则表示传递了外部值。如果没有,就无法得出一个坚定的结论

但是,如果仔细选择默认值是非常独特的,并且转换的发起者不太可能知道,那么实际值和默认值相同的事实强烈暗示外部调用者没有为此参数指定值。