конвертировать td в dt и dd

82
12

Я пытаюсь преобразовать таблицы. Я хотел бы преобразовать первую ячейку "td" в "dt", а вторую ячейку - в "dd" каждой строки. Я пробовал это, но не знаю, как отличить первую и вторую ячейки.

Источник

<table>
<tr>
<td class="dl"></td>
<td class="dl"></td>
</tr>
</table>

цель

<table>
<tr>
<dt></td>
<dd></dd>
</tr>
</table>

XSL

<xsl:when test="@class='dl'">
<dt><xsl:apply-templates select="*|text()"/></dt>
</xsl:when>
<xsl:when test="@class='?'">
<dd><xsl:apply-templates select="*|text()"/></dd>
</xsl:when>

Может ли кто-нибудь помочь мне здесь?

спросил(а) 2016-03-03T15:41:00+03:00 4 года, 6 месяцев назад
1
Решение
89

Добавьте еще один <xsl:choose> в котором вы проверяете позицию td. Если это 1, выведите dt, иначе выведите dd:

<xsl:choose>
<xsl:when test="@class='dl'">
<xsl:choose>
<xsl:when test="position()=1">
<dt><xsl:apply-templates select="*|text()"/></dt>
</xsl:when>
<xsl:otherwise>
<dd><xsl:apply-templates select="*|text()"/></dd>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="@class='?'">
<dd><xsl:apply-templates select="*|text()"/></dd>
</xsl:when>
</xsl:choose>

Функция: позиция номера ()

Функция position возвращает число, равное позиции контекста, из контекста оценки выражения. (https://www.w3.org/TR/xpath/#function-position)

Немного более читаемый без вложенных xsl:choose (и более логичный, так как вы все равно хотите обрабатывать td class="dl"):

<xsl:template match="td[@class='dl']">
<xsl:choose>
<xsl:when test="position()=1">
<dt><xsl:apply-templates select="*|text()"/></dt>
</xsl:when>
<xsl:otherwise>
<dd><xsl:apply-templates select="*|text()"/></dd>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

ответил(а) 2016-03-03T15:54:00+03:00 4 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема