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
XSLT:为每个循环使用模板标记变量和中断条件_Xslt - Fatal编程技术网

XSLT:为每个循环使用模板标记变量和中断条件

XSLT:为每个循环使用模板标记变量和中断条件,xslt,Xslt,我使用的XSLT创建了标记,该标记使用语句进行验证,并将或的值设置为true或false 如果条件为真,是否有任何方法可以为每个条件打断语句 我们可以使用主调用例程中模板变量或参数的值吗 例如: <!-- Main Xslt --> <xsl:template> <xsl:call-template name ="TestTemplate"> <!-- Here I want to use the variable or pa

我使用的XSLT创建了
标记,该标记使用
语句进行验证,并将
的值设置为true或false

  • 如果条件为真,是否有任何方法可以为每个条件打断语句
  • 我们可以使用主调用例程中模板变量或参数的值吗
  • 例如:

    <!-- Main Xslt -->
    <xsl:template>
      <xsl:call-template name ="TestTemplate">
        <!--  
          Here I want to use the variable or param that 
          is defined in TestTemplate, is it possible?
        -->
      </xsl:call-template>
    </xsl:template>
    
    <xsl:template name ="TestTemplate">
      <xsl:param name="eee"/>
      <xsl:for-each select ="//RootNode/LeafNode">
        <xsl:choose>
          <xsl:when test ="@Type='ABC'">
            <xsl:value-of select ="true"/>
          </xsl:when>
          <xsl:otherwise>false</xsl:otherwise>
        </xsl:choose>
      </xsl:for-each>
    </xsl:template>
    
    
    假的
    
    广告1。我认为这是不可能的,但我不确定

    公元2年。是的,您可以使用参数,但请注意它,因为它是常量。XSL中的所有变量和参数都是常量。看

    引用:

    一旦设置了变量的值,就不能更改或修改该值

    参数也是如此

    您可以使用(常量)参数调用模板:

    <call-template name="myTemplate">
       <xsl:with-param name="name" select="expression">
    </call-template>
    
    
    

    看看这真是一个很好的参考页。

    ad1。我认为这是不可能的,但我不确定

    公元2年。是的,您可以使用参数,但请注意它,因为它是常量。XSL中的所有变量和参数都是常量。看

    引用:

    一旦设置了变量的值,就不能更改或修改该值

    参数也是如此

    您可以使用(常量)参数调用模板:

    <call-template name="myTemplate">
       <xsl:with-param name="name" select="expression">
    </call-template>
    
    
    
    请看这是一个非常好的参考页面。

    对于您的问题:

    如果条件为真,是否有任何方法可以为每个条件打断语句

    不,通常这也是不必要的。XSLT不是一种命令式编程语言,命令式方法在这里也不能很好地工作

    您似乎想要做的是表达“查找第一个
    ,其中
    @Type='ABC'
    ,并根据是否存在返回true或false”

    在传统语言中执行此操作的方法与您的方法类似:对于每个节点,检查条件,如果条件满足,则返回

    在XSLT中,只需使用XPath选择节点:

    //RootNode/LeafNode[@Type='ABC']
    
    结果可能包含一个节点,也可能不包含。根本不需要为每个节点指定一个节点

    我们可以使用主调用例程中模板变量或参数的值吗

    不。变量和参数是严格限定范围的。一旦处理离开其父元素,它们就超出范围。它们也是常量,一旦声明它们就不能更改

    实现此目的的方法是使模板输出所需的值,并将其捕获到变量中:

    <xsl:template>
      <xsl:variable name="returnValue">
        <xsl:call-template name="TestTemplate" />
      </xsl:variable>
    </xsl:template>
    
    <xsl:template name="TestTemplate">
      <!-- the following expression emits true or false -->
      <xsl:value-of select="
        count(//RootNode/LeafNode[@Type='ABC']) gt; 0
      " />
    </xsl:template>
    
    关于你的问题:

    如果条件为真,是否有任何方法可以为每个条件打断语句

    不,通常这也是不必要的。XSLT不是一种命令式编程语言,命令式方法在这里也不能很好地工作

    您似乎想要做的是表达“查找第一个
    ,其中
    @Type='ABC'
    ,并根据是否存在返回true或false”

    在传统语言中执行此操作的方法与您的方法类似:对于每个节点,检查条件,如果条件满足,则返回

    在XSLT中,只需使用XPath选择节点:

    //RootNode/LeafNode[@Type='ABC']
    
    此操作的结果包含或不包含节点。根本不需要为每一个都设置一个

    我们可以使用主调用例程中模板变量或参数的值吗

    不可以。变量和参数的作用域是严格限定的。一旦处理离开父元素,它们就超出范围。它们也是常量,一旦声明它们就不能更改

    实现此目的的方法是使模板输出所需的值,并将其捕获到变量中:

    <xsl:template>
      <xsl:variable name="returnValue">
        <xsl:call-template name="TestTemplate" />
      </xsl:variable>
    </xsl:template>
    
    <xsl:template name="TestTemplate">
      <!-- the following expression emits true or false -->
      <xsl:value-of select="
        count(//RootNode/LeafNode[@Type='ABC']) gt; 0
      " />
    </xsl:template>