Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 通过xsltApplyStylesheet传入的参数_Xml_Xslt - Fatal编程技术网

Xml 通过xsltApplyStylesheet传入的参数

Xml 通过xsltApplyStylesheet传入的参数,xml,xslt,Xml,Xslt,它们是如何存储在转换中的 除了使用“$variable”之外,我如何访问它们。我可以通过他们的名字访问他们吗 <xsl:value-of select = '*/*/xsl:param[@name=myvariable']/@select"/> 否,不能按名称动态访问参数,但如果您使用的是支持的XSLT处理器,则可以设置如下映射,以按名称对其进行排序访问: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1

它们是如何存储在转换中的

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

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

否,不能按名称动态访问参数,但如果您使用的是支持的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>

否,参数不能按名称动态访问,但如果您使用的是支持的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>

参数的值是动态生成的,只能通过参数引用(使用
'$'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>

$pmyParam1有一个非默认值——肯定是从外部设置的!
上述转换将参数值与指定的默认值进行比较。如果两个值不同,则表示传递了外部值。如果没有,就无法得出确切的结论


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

参数的值,其值是动态生成的,只能通过参数引用访问(使用
'$”参数名
语法

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

$pmyParam1有一个非默认值——肯定是从外部设置的!
上述转换将参数值与指定的默认值进行比较。如果两个值不同,则表示传递了外部值。如果没有,就无法得出确切的结论


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

是否有办法查看在xslt文件中传递到转换中的参数?您应该能够通过使用
布尔($myParam1)
来测试是否指定了参数(除非您要传递布尔值),或者使用上述方法,您应该能够测试
boolean($params[@name='paramName']/node())
是否有办法查看在xslt文件中传递到转换中的参数?您应该能够使用
boolean($myParam1)
(除非传递一个布尔值),或者使用上面的方法,您应该能够测试
boolean($params[@name='paramName']/node())