将td转换为dt和dd

时间:2016-03-03 12:41:02

标签: xml xslt

我尝试转换表格。 我想转换第一个单元格" 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>

有人可以帮助我吗?

1 个答案:

答案 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>