2013-03-26 3 views
-1

Прежде всего, я новичок в XSLT. Я работаю с списком Sharepoint, и мне нужно получить ссылку, чтобы показать, есть ли данные в определенных кварталах. Если нет данных за определенную четверть, мне нужно иметь ярлык, который так говорит.Xstl глобальная переменная, установленная для каждого и используемая после foreach

Так что я сделал то, что я создал цикл foreach для каждого из данных того же месяца данного года. Я знаю, что я не могу переопределить переменную в xslt, но я не знаю, как делать то, что я хочу. Вот пример моего кода. Поскольку я работаю с Sharepoint, я не имею доступа к XML. :/

<xsl:variable name="DataQ1" select="'False'"/> 
<xsl:variable name="DataQ2" select="'False'"/> 
<xsl:variable name="DataQ3" select="'False'"/> 
<xsl:variable name="DataQ4" select="'False'"/> 
<xsl:for-each select="../Row[generate-id()=generate-id(key('MonthKey', substring(@Date,6,7))[substring('@Date',1,4) = $varYear)][1])]"> 
    <xsl:variable name="currentMonth" select="number(substring(@Date,6,7))"/> 
    <xsl:choose> 
     <xsl:when test="$currentMonth &gt;= 1 and $currentMonth $lt;=4"> 
      <!--set $DataQ1 to true--> 
     </xsl:when> 
     <xsl:when test="$currentMonth &gt;= 4 and $currentMonth $lt;=7"> 
      <!--set $DataQ2 to true--> 
     </xsl:when> 
     <xsl:when test="$currentMonth &gt;= 7 and $currentMonth $lt;=10"> 
      <!--set $DataQ3 to true--> 
     </xsl:when> 
     <xsl:otherwise> 
      <!--set $DataQ4 to true--> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:for-each> 
<div> 
    <xsl:choose> 
     <xsl:when test="$DataQ1= 'True'"> 
      <a> 
       <xsl:attribute name="href"> 
        <xsl:value-of select="www.example.come"/> 
       </xsl:attribute> 
       <xsl:value-of select="'LinkToDataofQ1'"/> 
      </a> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="'There's no data for this quarter.'"/> 
     </xsl:otherwise> 
    </xsl:choose> 
</div> 
+0

Пожалуйста, * отредактируйте * вопрос и укажите точный (желательно небольшой) исходный XML-документ и точный желаемый результат преобразования. Кроме того, пожалуйста, объясните требования (правила/ограничения), которые должно выполнить преобразование. –

ответ

1

Вы можете использовать функцию key в вашем примере кода, но вы не отправлял декларацию ключа. Но я думаю, что вы можете добиться того, что вы хотите с помощью следующего кода:

<div> 
    <xsl:choose> 
     <xsl:when test="../Row[substring(@Date, 1, 4) = $varYear and substring(@Date, 6, 2) &gt;= 1 and substring(@Date, 6, 2) &lt; 4]"> 
      <a href="http://www.example.com/">LinkToDataofQ1</a> 
     </xsl:when> 
     <xsl:otherwise>There's no data for this quarter.</xsl:otherwise> 
    </xsl:choose> 
</div> 

Некоторых других примечаний:

  • В тесте на Q1 вы написали $currentMonth <= 4. Я думаю, что вы хотите $currentMonth < 4.
  • Чтобы извлечь этот месяц из @Date Вы использовали substring(@Date, 6, 7). Третий аргумент substring - это длина подстроки, а не конечный индекс. Поэтому вы, вероятно, должны написать substring(@Date, 6, 2).
  • Вместо <xsl:value-of select="'string'"/> вы можете просто написать string.
+0

Спасибо, что это то, что я искал. И извините за мои многочисленные ошибки. :/Хорошо видеть, что вы все еще можете понять, что я хотел! – Frederic

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