我正在研究函数position(),这给出了一个数字。
我会使用position()的数量作为在排序节点中访问的索引。
我正在使用此说明:
<xsl:value-of select="position()+50"/>
例如,如果position为1则给51,如果position为2则给出52等。
我将使用此索引访问节点:
ITA_LIGHT_NUMBER[position()+50].
我在这种情况下使用它:
<body style="tab-interval:35.4pt">
<div>
<table style="font-size:9pt; border-style:none; border-collapse:collapse; vertical-align:top; font-family:Univers Condensed;" border="1" cellspacing="0" cellpadding="0">
<tr>
<td> <p>Internazionale</p></td>
<td> <p>Italiano</p></td>
<td> <p>Internazionale</p></td>
<td> <p>Italiano</p></td>
<td> <p>Internazionale</p></td>
<td> <p>Italiano</p></td>
<td> <p>Internazionale</p></td>
<td> <p>Italiano</p></td>
<td> <p>Internazionale</p></td>
<td> <p>Italiano</p></td>
</tr>
<xsl:for-each select="//INTERNATIONAL_LIGHT_NUMBER">
<xsl:sort select="." data-type="number" order="ascending"/>
<xsl:if test="position()<='50'">
<tr>
<xsl:variable name="position" select="position()"/>
<td><xsl:value-of select="."/></td>
<td><xsl:value-of select="preceding-sibling::ITA_LIGHT_NUMBER"/></td>
<td><xsl:value-of select="position()+50"/></td>
<td><xsl:value-of select="position()"/></td>
<td><xsl:value-of select="position()+100"/></td>
<td><xsl:value-of select="position()"/></td>
<td><xsl:value-of select="position()+150"/></td>
<td><xsl:value-of select="position()"/></td>
<td><xsl:value-of select="position()+200"/></td>
<td><xsl:value-of select="position()"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</div>
</body>
前两列运行得很好,不运行。
使用这种方法我在第一列中写入1到50,在第三列中写入51到100,在第五列中写入101到150等,但是我不会写一个数字而是写入节点的内容字段与数字相对应。
答案 0 :(得分:1)
ITA_LIGHT_NUMBER[position()+50]
永远不会选择或匹配任何内容,但如果将当前位置存储在变量中:
<xsl:variable name="position" select="position()"/>
然后你可以使用:
ITA_LIGHT_NUMBER[$position+50]
用于解决节点50远离当前节点的问题。
回复您的最新问题:
我认为这不是一个好方法,但是如果你想尝试一下,请尝试以下方式:
<xsl:for-each select="item">
<xsl:sort/>
<xsl:if test="position() <= 50">
<xsl:variable name="position" select="position()"/>
<tr>
<td><xsl:value-of select="."/></td>
<td><xsl:value-of select="../item[$position+50]"/></td>
<td><xsl:value-of select="../item[$position+100]"/></td>
<td><xsl:value-of select="../item[$position+150]"/></td>
<td><xsl:value-of select="../item[$position+200]"/></td>
</tr>
</xsl:if>
</xsl:for-each>
当然可以更简单地写成:
<xsl:for-each select="item">
<xsl:sort/>
<xsl:if test="position() <= 50">
<tr>
<td><xsl:value-of select="."/></td>
<td><xsl:value-of select="following-sibling::item[50]"/></td>
<td><xsl:value-of select="following-sibling::item[100]"/></td>
<td><xsl:value-of select="following-sibling::item[150]"/></td>
<td><xsl:value-of select="following-sibling::item[200]"/></td>
</tr>
</xsl:if>
</xsl:for-each>
此方法的一个较大问题是您在水平(≤5列)和垂直(≤50行)方向上限制自己。因此,如果您有超过250件物品,其余部分将被切断;如果你的显着减少,那么显示将是不均匀的。