Как реализовать оператор if-else в XSLT?


Я пытаюсь реализовать оператор if-else в XSLT, но мой код просто не анализирует. У кого-нибудь есть идеи?

  <xsl:variable name="CreatedDate" select="@createDate"/>
  <xsl:variable name="IDAppendedDate" select="2012-01-01" />
  <b>date: <xsl:value-of select="$CreatedDate"/></b> 

  <xsl:if test="$CreatedDate > $IDAppendedDate">
    <h2> mooooooooooooo </h2>
  </xsl:if>
  <xsl:else>
    <h2> dooooooooooooo </h2>
  </xsl:else>
4 136

4 ответа:

вы должны переопределить его с помощью <xsl:choose> теги:

       <xsl:choose>
         <xsl:when test="$CreatedDate > $IDAppendedDate">
           <h2> mooooooooooooo </h2>
         </xsl:when>
         <xsl:otherwise>
          <h2> dooooooooooooo </h2>
         </xsl:otherwise>
       </xsl:choose>

если оператор используется для быстрой проверки только одного условия. Если у вас есть несколько вариантов, используйте <xsl:choose> как показано ниже:

   <xsl:choose>
     <xsl:when test="$CreatedDate > $IDAppendedDate">
       <h2>mooooooooooooo</h2>
     </xsl:when>
     <xsl:otherwise>
      <h2>dooooooooooooo</h2>
     </xsl:otherwise>
   </xsl:choose>

кроме того, вы можете использовать несколько <xsl:when> теги, чтобы выразить If .. Else If или Switch модели, как показано ниже:

   <xsl:choose>
     <xsl:when test="$CreatedDate > $IDAppendedDate">
       <h2>mooooooooooooo</h2>
     </xsl:when>
     <xsl:when test="$CreatedDate = $IDAppendedDate">
       <h2>booooooooooooo</h2>
     </xsl:when>
     <xsl:otherwise>
      <h2>dooooooooooooo</h2>
     </xsl:otherwise>
   </xsl:choose>

предыдущий пример был бы эквивалентен псевдокоду ниже:

   if ($CreatedDate > $IDAppendedDate)
   {
       output: <h2>mooooooooooooo</h2>
   }
   else if ($CreatedDate = $IDAppendedDate)
   {
       output: <h2>booooooooooooo</h2>
   }
   else
   {
       output: <h2>dooooooooooooo</h2>
   }

если можно несколько предложений (два года спустя, но, надеюсь, полезно для будущих читателей):

  • фактор из общего h2 элемент.
  • фактор из общего ooooooooooooo текст.
  • будьте в курсе нового XPath 2.0 if/then/else построить при использовании XSLT 2.0.

С XSLT 1.0 решение (также работает с XSLT 2.0)

<h2>
  <xsl:choose>
    <xsl:when test="$CreatedDate > $IDAppendedDate">m</xsl:when>
    <xsl:otherwise>d</xsl:otherwise>
  </xsl:choose>
  ooooooooooooo
</h2>

XSLT 2.0 Решение

<h2>
   <xsl:value-of select="if ($CreatedDate > $IDAppendedDate) then 'm' else 'd'"/>
   ooooooooooooo
</h2>

самый прямой подход-сделать второй if-тест, но с перевернутым условием. Этот метод короче, легче на глазах, и легче получить право, чем выбрать, когда в противном случае вложенный блок:

<xsl:variable name="CreatedDate" select="@createDate"/>
     <xsl:variable name="IDAppendedDate" select="2012-01-01" />
     <b>date: <xsl:value-of select="$CreatedDate"/></b> 
     <xsl:if test="$CreatedDate &gt; $IDAppendedDate">
        <h2> mooooooooooooo </h2>
     </xsl:if>
     <xsl:if test="$CreatedDate &lt;= $IDAppendedDate">
        <h2> dooooooooooooo </h2>
     </xsl:if>

вот реальный пример метода, используемого в таблице стилей для правительственного веб-сайта:http://w1.weather.gov/xml/current_obs/latest_ob.xsl