web-dev-qa-db-ja.com

XSLTでif-else文を実装する方法

私はXSLTでif -elseステートメントを実装しようとしていますが、私のコードでは解析できません。誰かアイデアがありますか?

  <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>
153
Funky

<xsl:choose>タグを使って再実装する必要があります。

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

Ifステートメントは、ただ1つの条件を素早くチェックするために使用されます。複数のオプションがある場合は、以下に示すように<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>
   }
57

私がいくつかの提案を提供するかもしれないなら(2年後だが将来の読者にはうまくいけば役に立つ)

  • 共通のh2要素を取り除きます。
  • 共通のoooooooooooooテキストを取り除きます。
  • XSLT 2.0を使用する場合は、新しいXPath 2.0のif/then/else構造に注意してください。

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>
35
kjhughes

最も簡単な方法は、条件を逆にして2回目の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>

これは、政府のWebサイトのスタイルシートで使用されている技術の実例です。 http://w1.weather.gov/xml/current_obs/latest_ob.xsl

1