XML - XSLT - 数字和排序

时间:2016-01-15 11:46:39

标签: xml xslt

我想对我的xml数据进行排序并对它们进行编号。这是例如xml代码:

  <images>
      <image>
        <title>cat</title>
        <grade>3</grade>
      </image>
      <image>
        <title>dog</title>
        <grade>5</grade>
      </image>
      <image>
        <title>snake</title>
        <grade>1</grade>
      </image>
      <image>
        <title>fish</title>
        <grade>2</grade>
      </image>
   </images>

和xslt代码:

  <xsl:template match="images">
    <xsl:for-each select="image">
      <xsl:sort select="grade"/>
      <tr>
        <td>
          <xsl:number/>
        </td>
        <td>
          <xsl:value-of select="title"/>
        </td>
        <td>
          <xsl:value-of select="grade"/>
        </td>
      </tr>
    </xsl:for-each>
  </xsl:template>

结果是:

3 cat  1
4 fish 2
1 cat  3
2 dog  5

我想拥有:

1 cat  1
2 fish 2
3 cat  3
4 dog  5

我怎样才能以简单的方式做到这一点?

2 个答案:

答案 0 :(得分:2)

而不是使用<xsl:number />而不是

 <xsl:value-of select="position()" />

position()将在排序后返回所选节点集中节点的位置(而不是层次结构中节点的位置)。

答案 1 :(得分:1)

xsl:数字很好,但你需要当前位置。您还应该按数值排序:

<xsl:template match="images">
    <xsl:for-each select="image">
      <xsl:sort select="number(grade)"/>
      <tr>
        <td>
          <xsl:number value="position()"/>
        </td>
        <td>
          <xsl:value-of select="title"/>
        </td>
        <td>
          <xsl:value-of select="grade"/>
        </td>
      </tr>
    </xsl:for-each>
</xsl:template>