2013-10-01 3 views
0

Я пытаюсь наследовать переменную от предыдущего шаблона до текущей.Наследовать переменные из другого шаблона

Вот мой XSL, интересно, если есть некоторые вещи неправильно:

<xsl:template match="child1"> 
    <xsl:variable name="props-value"> 
     <xsl:value-of select="VALUE1"/> 
    </xsl:variable> 
    <xsl:apply-templates select="attribute[matches(.,'[email protected]')]"> 
     <xsl:with-param name="props-value" select="$props-value" /> 
    </xsl:apply-templates> 
</xsl:template> 
<xsl:template match="attribute[matches(.,'[email protected]')]"> 
<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> 

Ожидаемый результат: Значение верно.

+0

любые предложения пожалуйста... – phani

ответ

0

Две проблемы с вашей XSLT:

  1. В переменной в первом шаблоне, вы выбрали "VALUE1" в качестве значения. Это соответствует <VALUE1>elements. Я считаю, что вы хотите выбрать " 'VALUE1' " (строка со значением «VALUE1»)
  2. В вашем тесте во втором шаблоне вы написали $props_value с подчеркиванием, тогда как параметр называется props-value с дефисом.

Вот исправленная версия вашего 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> 
Смежные вопросы