2013-10-08 2 views
1

я получил следующее значение в файле XML:Как мне создать шаблон в шаблоне?

<document> 
    <effectiveTime value="20131008"/> 
    <item> 
    <effectiveTime> 
     <low value=20131008"/> 
    </effectiveTime> 
    </item> 
</document> 

я следующий как часть моего XSL файла:

<xsl:variable name="today"> 
    <xsl:call-template name="formatDate"> 
     <xsl:with-param name="date" select ="/Document/effectiveTime/@value" /> 
    </xsl:call-template> 
</xsl:variable> 

<!-- template for date formatting from xml document --> 
<xsl:template name="formatDate"> 
    <xsl:param name="date" /> 
    <xsl:variable name="year" select="substring($date, 1, 4)" /> 
    <xsl:variable name="month" select="number(substring($date, 5, 2))" /> 
    <xsl:variable name="day" select="substring($date, 7, 2)" /> 
    <xsl:value-of select="concat($month, '/', $day, '/', $year)" /> 
</xsl:template> 

<!-- template for comparing against the date of visit --> 
<xsl:template name="compareToday"> 
    <xsl:param name="date"/> 
    <xsl:if test="$date = $today"> 
      <xsl:text>true</xsl:text> 
    </xsl:if> 
</xsl:template> 

Мне нужно сравнить/документ/пункт/effectivetime/low/@ значение, которое я сохранил в переменной $ today, так что я могу сделать строку на выходе (html) полужирным. Это то, что я в настоящее время сделать сравнения:

<xsl:variable name="IsToday"> 
    <xsl:call-template name="compareToday"> 
     <xsl:with-param name="date" select="/document/item/effectiveTime/low/@value"/> 
    </xsl:call-template> 
</xsl:variable> 
<span> 
    <xsl:if test="$IsToday = 'true'"> 
     <xsl:attribute name="style"> 
      <xsl:text>font-weight:bold;</xsl:text> 
     </xsl:attribute> 
    </xsl:if> 
    <xsl:value-of select="/document/item/effectiveTime/low/@value" /> 
</span> 

Это не работает, потому что он пытается сравнить 20131008 от 10/08/2013. Кажется, я не могу получить формат, который нужно сделать, прежде чем делать сравнение. Большинство (но не все) дат в моем документе находятся в формате YYYYMMDD.

Спасибо

ответ

1

Я понял, что мне нужно делать. Я должен сначала сделать переменную с текущей датой, которая отформатирована правильно. Затем передайте это имя переменной в сравнение.

<xsl:variable name="itemDate"> 
    <xsl:call-template name="formatDate"> 
     <xsl:with-param name="date" select="/document/item/effectiveTime/low/@value"/> 
    </xsl:call-template> 
</xsl:variable> 
<xsl:variable name="IsToday"> 
    <xsl:call-template name="compareToday"> 
     <xsl:with-param name="date" select="$itemDate"/> 
    </xsl:call-template> 
</xsl:variable> 

Это позволяет мне сравнивать яблоки с яблоками с точки зрения форматирования.

1

Попробуйте следующие регулировки

<xsl:variable name="IsToday"> 
    <!-- Store formated date in temporary variable --> 
    <xsl:variable name="tmp"> 
     <xsl:call-template name="formatDate"> 
      <xsl:with-param name="date" select="/document/item/effectiveTime/low/@value"/> 
     </xsl:call-template> 
    </xsl:variable> 

    <xsl:call-template name="compareToday"> 
     <!-- Pass temporary variable into compare template --> 
     <xsl:with-param name="date" select="$tmp"/> 
    </xsl:call-template> 
</xsl:variable> 

Или вы можете вложить вызов другого имени шаблона в XSL: с-PARAM элемент, как

<xsl:variable name="IsToday"> 
    <xsl:call-template name="compareToday"> 
     <xsl:with-param name="date"> 
      <!-- Another named template call nested in xsl:with-param --> 
      <xsl:call-template name="formatDate"> 
       <xsl:with-param name="date" select="/document/item/effectiveTime/low/@value"/> 
      </xsl:call-template> 
     </xsl:with-param> 
    </xsl:call-template> 
</xsl:variable> 
+0

вот что я сделал. Я просто не вложил его в первую переменную $ IsToday. – jjasper0729

+0

о, вы правы ... Я не перезагружал страницу перед публикацией, поэтому я пропустил, что вы уже ответили на нее. –

+0

Не проблема, как только я представил вопрос, способ исправить это ударил меня, поэтому я пошел вперед и ответил на него, чтобы он не оставил его открытым. Спасибо за ввод, хотя. Имеет значение, если переменная date temp вложена внутри нашей вне $ IsToday? – jjasper0729

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