Как реализовать оператор 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 ответа:
вы должны переопределить его с помощью
<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 > $IDAppendedDate"> <h2> mooooooooooooo </h2> </xsl:if> <xsl:if test="$CreatedDate <= $IDAppendedDate"> <h2> dooooooooooooo </h2> </xsl:if>
вот реальный пример метода, используемого в таблице стилей для правительственного веб-сайта:http://w1.weather.gov/xml/current_obs/latest_ob.xsl