我尝试转换表格。 我想转换第一个单元格" 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>
有人可以帮助我吗?
答案 0 :(得分:0)
添加另一个<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>
功能: 数字 位置()
位置函数返回一个数字,该数字等于表达式评估上下文中的上下文位置。 (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>