Элемент <xsl:if> в XSLT

Определение и использование

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

Совет: Используйте <xsl:choose> вместе с <xsl:when> и <xsl:otherwise>, чтобы выразить多重ные условия тестирования!

Грамматика

<xsl:if
test="expression">
<!-- Content: template -->
</xsl:if>

Атрибут

Атрибут Значение Описание
test выражение Обязателен. Определяет условие для тестирования.

Пример

Пример 1

Когда цена CD превышает 10, выбирать значения title и artist:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <h2>My CD Collection</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Title</th>
        <th>Artist</th>
      </tr>
      <xsl:for-each select="catalog/cd">
      <xsl:if test="price > 10">
        <tr>
          <td><xsl:value-of select="title"/></td>
          <td><xsl:value-of select="artist"/></td>
        </tr>
      </xsl:if>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

Просмотреть файл XML,Просмотреть файл XSL,Просмотреть результат.

Пример 2

Показывать заголовки каждого CD. Если это не последний или предпоследний CD, то между заголовками CD вставлять ", ". Если это последний CD, то после заголовка добавить "!". Если это предпоследний CD, то после него добавить ", and ":

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <h2>My CD Collection</h2>
    <p>Titles:
    <xsl:for-each select="catalog/cd">
      <xsl:value-of select="title"/>
      <xsl:if test="position()!=last()">
        <xsl:text>, </xsl:text>
      </xsl:if>
      <xsl:if test="position()=last()-1">
        <xsl:text> и </xsl:text>
      </xsl:if>
      <xsl:if test="position()=last()">
        <xsl:text>!</xsl:text>
      </xsl:if>
    </xsl:for-each>
    </p>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>