XSLT Как добавить логику - PullRequest
       6

XSLT Как добавить логику

0 голосов
/ 22 сентября 2009

У меня есть следующая коллекция в документе XML:

<events>
   <event>
      <type>Downloaded</type>
      <result>Sucess</result>
   </event>
   <event>
      <type>Processed</type>
      <result>Sucess</result>
   </event>
</events>

Теперь в моем XSLT есть таблица с TD - я хочу, чтобы значение этого TD представляло статус событий. Если для обработанного существует событие и результат равен true, то я хочу, чтобы значение этого TD было обработано, аналогично, если обработанное не существует, то если загруженный файл существует и статус успешен, то я хочу, чтобы значение TD было быть загруженным ...

Не ожидайте полного кода, просто пример того, как добавить некоторую логику программирования в XSLT.

Что мне действительно нужно проверить ... это

Существует ли элементное событие с type = "Processed" .... если нет ... то .... я разберусь с остальным .....

Ответы [ 3 ]

1 голос
/ 22 сентября 2009

Не проверено, и меня немного смущает логика, которую вы пытаетесь реализовать, но попробуйте начать с этого:

<xsl:template match="/">
  <table>
    <xsl:apply-templates select="events/event" />
  </table>
</xsl:template>

<xsl:template match="event">
  <xsl:if test="type = 'Processed'">
    <tr>
      <td>
        <xsl:value-of select="result" />
      </td>
    </tr>
  </xsl:if>
</xsl:template>
1 голос
/ 22 сентября 2009

xsl: выберите другой вариант. По этой ссылке:

<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">
      <tr>
        <td><xsl:value-of select="title"/></td>
        <xsl:choose>
          <xsl:when test="price &gt; 10">
            <td bgcolor="#ff00ff">
            <xsl:value-of select="artist"/></td>
          </xsl:when>
          <xsl:otherwise>
            <td><xsl:value-of select="artist"/></td>
          </xsl:otherwise>
        </xsl:choose>
      </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

xsl: если не имеет других функций.

1 голос
/ 22 сентября 2009

Вы можете добавить if / else if логика в XSLT с помощью <xsl:if>

Существует также возможность иметь что-то вроде оператора switch с <xsl:choose>, что включает в себя возможность делать другое поведение.

Эти конструкции принимают тестовый атрибут, в котором вы указываете условие. Вот хорошая статья о полезных тестах для начинающих.

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

Пример: для вашего документа задан шаблон вроде:

<xsl:template match="/">
    <xsl:for-each select="events/event">
        <xsl:choose>
            <xsl:when test="type/text() = 'Processed'">
                <xsl:value-of select="result"></xsl:value-of>
            </xsl:when>    
        </xsl:choose>
    </xsl:for-each>
</xsl:template>

Будет выдан текст «Успех».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...