使用"位置"作为节点中的访问索引

时间:2014-12-01 07:43:05

标签: xslt xslt-1.0

我正在研究函数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()&lt;='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等,但是我不会写一个数字而是写入节点的内容字段与数字相对应。

1 个答案:

答案 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() &lt;= 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() &lt;= 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件物品,其余部分将被切断;如果你的显着减少,那么显示将是不均匀的。