Несколько условий в XSLT

Я должен использовать XSLT для преобразования моего XML-документа в таблицу Bootstrap. Я сделал это до использования PHP, и это было довольно просто, и я пытаюсь адаптировать его в XSLT.

С PHP я сделал что-то вроде этого:

while($line = $request->fetch(PDO::FETCH_ASSOC))
{
echo '<tr ';
switch($line["category"])
{
case "Movie" : echo "class='info'";break;
case "Tv show" : echo "class='danger'";break;
case "Music" : echo "class='success'";break;
}
echo ' >';
...
echo "</tr>";
}

Я попытался сделать подобный код в XSLT (не используя конкатенацию, потому что мы не можем):

<xsl:for-each select="demands/demand">
<xsl:choose>
<xsl:when test="category  = 'Movie'">
<tr class="info">
</xsl:when>
<xsl:when test="category = 'Tv show'">
<tr class="danger">
</xsl:when>
<xsl:when test="categorie = 'Music'">
<tr class="success">
</xsl:when>
</xsl:choose>
...
</tr>
</xsl:for-each>

Это не работает («Несоответствие открывающего и заканчивающего тегов: строка tr»), потому что есть только один закрывающий тег tr. Есть ли какое-то решение для этого? Как я могу сделать это самым простым способом?

Спасибо за вашу помощь.

0

Решение

Вариант решения Мартина Хоннена с немного большим повторным использованием кода:

<xsl:template match="demands/demand">
<tr>
<xsl:attribute name="class">
<xsl:apply-templates select="@category"/>
</xsl:attribute>
<xsl:apply-templates/>
</tr>
</xsl:template>

<xsl:template match="@category[. = 'Movie']">info</xsl:template>

<xsl:template match="@category[. = 'Tv show']">danger</xsl:template>

<xsl:template match="@category[. = 'Music']">success</xsl:template>
3

Другие решения

Правильный подход заключается в использовании

<xsl:template match="demands/demand[category = 'Movie']">
<tr class="info">
<xsl:apply-templates/>
</tr>
</xsl:template>

<xsl:template match="demands/demand[category = 'Tv show']">
<tr class="danger">
<xsl:apply-templates/>
</tr>
</xsl:template>

<xsl:template match="demands/demand[category = 'Music']">
<tr class="success">
<xsl:apply-templates/>
</tr>
</xsl:template>

а потом твой ... помещается в сгенерированные шаблоны для содержания demand элементы.

3

По вопросам рекламы [email protected]