2013-08-03 2 views
1

В моем XSLT у меня есть эта функция, которая успешно совпадает с/или/и двумя столбцами. FieldRef отлично сочетается.Соответствие двух полей в XSLT и получение текущего значения

Моя проблема в том, что $currentValue никогда не кажется равным тому, что я тестирую (то, что я тестирую, кажется, является пустой строкой).

В каком месте я ошибаюсь?

<!-- Convert the Fields into a status icons --> 
<xsl:template match="FieldRef[@Name='YesNo']|FieldRef[@Name='TrueFalse']" mode="body"> 
    <xsl:param name="thisNode" select="." /> 
    <xsl:variable name="currentValue" select="$thisNode/@*[name()=current()/@Name]" /> 

    <xsl:choose> 
     <xsl:when test="$currentValue='Yes'"> 
      <span class="yesno yes"><xsl:value-of select="$currentValue" /></span> 
     </xsl:when> 
     <xsl:when test="$currentValue='No'"> 
      <span class="yesno no"><xsl:value-of select="$currentValue" /></span> 
     </xsl:when> 
     <xsl:when test="$currentValue='True'"> 
      <span class="yesno yes"><xsl:value-of select="$currentValue" /></span> 
     </xsl:when> 
     <xsl:when test="$currentValue='False'"> 
      <span class="yesno no"><xsl:value-of select="$currentValue" /></span> 
     </xsl:when>  
     <xsl:otherwise> 
      <span class="yesnoN"><xsl:value-of select="$currentValue" /></span> 
     </xsl:otherwise> 
    </xsl:choose> 

</xsl:template> 

Одна вещь, которую я знаю, что если я

<xsl:variable name="thisName" select="./@Name" /> select="./@Name" /> 

тогда будет пытаться соответствовать, используя имя самого поля (вместо его значения).

Что я могу сделать?

ответ

0

Ах, после нескольких часов и часов, вот он:

Эти две строки являются ключами:

<xsl:param name="thisNode" select="."/> 
<xsl:variable name="currentValue" select="$thisNode/@*[name()=current()/@Name]" /> 

Здесь вы целая функция, которая считывает два различных столбцов и применяет значения к любой один:

<xsl:template match="FieldRef[@Name='YesNo1']|FieldRef[@Name='YesNo2']" mode="body"> 
    <xsl:param name="thisNode" select="."/> 

    <xsl:variable name="currentValue" select="$thisNode/@*[name()=current()/@Name]" /> 
    <xsl:variable name="yesvalue">Yes</xsl:variable> 
    <xsl:variable name="novalue">No</xsl:variable> 

    <xsl:choose> 
     <xsl:when test="contains($currentValue, $yesvalue)"> 
      <span class="yesno yes"><xsl:value-of select="$currentValue" /></span> 
     </xsl:when> 
     <xsl:when test="contains($currentValue, $novalue)"> 
      <span class="yesno no"><xsl:value-of select="$currentValue" /></span> 
     </xsl:when> 
    <xsl:otherwise> 
      <span class="yesnoN"><xsl:value-of select="$currentValue" /></span> 
     </xsl:otherwise> 
    </xsl:choose> 

</xsl:template> 

Есть some other examples of matching on multiple match fields here.

Смежные вопросы