Как реализовать инструкцию 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>
Ответы
Ответ 1
Вам нужно переопределить его с помощью тега <xsl:choose>
:
<xsl:choose>
<xsl:when test="$CreatedDate > $IDAppendedDate">
<h2> mooooooooooooo </h2>
</xsl:when>
<xsl:otherwise>
<h2> dooooooooooooo </h2>
</xsl:otherwise>
</xsl:choose>
Ответ 2
Если оператор используется для проверки только одного условия быстро.
Если у вас есть несколько опций, используйте <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>
}
Ответ 3
Если я могу предложить некоторые предложения (два года спустя, но, надеюсь, полезно будущим читателям):
- Выделите общий элемент
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>
Ответ 4
Самый простой подход - сделать второй if-test, но с условием инвертированного. Этот метод короче, проще на глазах, и легче получить правильное решение, чем вложенный вложенной блок:
<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