从其他模板继承变量

时间:2013-10-01 15:38:44

标签: xml xslt xslt-1.0 xslt-2.0

我正在尝试将先前模板中的变量继承到当前模板。

这是我的xsl,想知道是否有问题:

<xsl:template match="child1">
    <xsl:variable name="props-value">
        <xsl:value-of select="VALUE1"/>
    </xsl:variable>  
    <xsl:apply-templates select="attribute[matches(.,'=@')]">
        <xsl:with-param name="props-value" select="$props-value" /> 
    </xsl:apply-templates>
</xsl:template>  
<xsl:template match="attribute[matches(.,'=@')]">
<xsl:param name="props-value"/>
<xsl:copy>  
<xsl:apply-templates select="@*"/>
    <xsl:if test="$props_value = 'VALUE1'">
        Value is true
    </xsl:if>
</xsl:copy>
</xsl:template>

预期输出:值为真。

1 个答案:

答案 0 :(得分:0)

XSLT存在两个问题:

  1. 在第一个模板的变量中,您选择了"VALUE1"作为值。这与<VALUE1> 元素匹配。我相信您要选择" 'VALUE1' "(值为'VALUE1'的字符串)
  2. 在第二个模板的测试中,您使用下划线写了$props_value,而带有连字符的参数名为props-value
  3. 以下是XSLT的更正版本:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
    
      <xsl:template match="child1">
        <xsl:variable name="props-value">
          <xsl:value-of select=" 'VALUE1' "/>
        </xsl:variable>
        <xsl:apply-templates select="attribute">
          <xsl:with-param name="props-value" select="$props-value" />
        </xsl:apply-templates>
      </xsl:template>
    
      <xsl:template match="attribute">
        <xsl:param name="props-value"/>
        <xsl:copy>
          <xsl:apply-templates select="@*"/>
          <xsl:if test="$props-value = 'VALUE1'">
            Value is true
          </xsl:if>
        </xsl:copy>
      </xsl:template>
    
    </xsl:stylesheet>
    

    当应用于以下输入XML时:

    <child1>
      <attribute/>
    </child1>
    

    它产生这个输出XML:

    <attribute>
                Value is true
              </attribute>