xslt一次显示一组n个xml节点

时间:2019-05-28 14:32:36

标签: xml xslt

更新:

此问题中包含一些xsl代码!

我在这个问题上挣扎了数周(甚至数月)。我是这个xml / xslt领域的初学者,我只需要至少一种对XML数据有效的分页技术。我似乎只是找不到关于此问题的一个可行的解决方案!

我已经指出,在我看来,分页是最有用的xml / xslt Web主题之一,并且是整个Web上讨论较少的主题之一。它只有一部分,其中大多数无法正常运行。  无论如何,这都是关于这个stkovrflw问题的:

xslt xml table records pagination

可以看到我的整个问题。   michael.hor257k 已回答了我,我非常感谢他。  要点是,这只是半途而废(就我的要求而言)

根据传递的某些参数(页面编号),我一次只需要显示5个节点。我将其命名为

参数名称=“ pagnmbr”

首先,如果此$ pagnmbr为1,则xslt将显示:

01 02 03 04 05

否则,如果为2($ pagnmbr = 2),则会显示:

06 07 08 09 10

如果同一参数变为3,则读数将为:

11 12 13 14 15

以此类推。瞧,我非常需要做这种功能。

更新: 我只是做了以下xslt代码:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:param name="crrtPag" select="2"/>     <!-- current page -->
 <xsl:variable name="rcrdsppag" select="5"/> <want 5 displaying records per page -->

 <xsl:template name="pag" match="/group/item">
 <html>
  <body>
   <xsl:if test="position()-$crrtPag = ($rcrdsppag - 1)*($crrtPag - 1)"> 
    <xsl:call-template name="display_pag">
    <xsl:with-param name="crrtPag" select="item[position() mod $rcrdsppag = 1]"/>
    </xsl:call-template>
   </xsl:if>
   </body>
   </html>
  </xsl:template>

  <xsl:template name="display_pag" match="item"> <!-- item -->
   <xsl:param name="crrtPag"/> 
     <xsl:for-each select="//item"> 
       <xsl:if test="position()&lt;=5">
         <xsl:value-of select="."/> 
       </xsl:if>
     </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

但是,正如人们可能注意到的那样,它一直只显示:

01 02 03 04 05

即使我将$ pagnmbr = 2或$ pagnmbr = 3 ..也仅弹出前5个组项目。它永远不会显示

的下一个节点集

06 07 08 09 10

以此类推..

请大家帮我!!!  预先非常感谢。

1 个答案:

答案 0 :(得分:0)

给出:

XML

<group>
    <item> 01 </item>
    <item> 02 </item>
    <item> 03 </item>
    <item> 04 </item>
    <item> 05 </item>
    <item> 06 </item>
    <item> 07 </item>
    <item> 08 </item>
    <item> 09 </item>
    <item> 10 </item>
    <item> 11 </item>
    <item> 12 </item>
    <item> 13 </item>
    <item> 14 </item>
    <item> 15 </item>
    <item> 16 </item>
    <item> 17 </item>
    <item> 18 </item>
    <item> 19 </item>
    <item> 20 </item>
    <item> 21 </item>
    <item> 22 </item>
    <item> 23 </item>
    <item> 24 </item>
    <item> 25 </item>
    <item> 26 </item>
</group>

以下样式表:

XSLT 1.0

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:param name="pageSize" select="5" />
<xsl:param name="pageNumber" select="3" />

<xsl:template match="/group">
    <html>
        <body>
            <div id="page{$pageNumber}">
                <ul>
                    <xsl:variable name="start" select="$pageSize * ($pageNumber - 1) + 1" />
                    <xsl:for-each select="item[position() >= $start and position() &lt; $start + $pageSize]">     
                        <li>
                            <xsl:value-of select="."/>
                        </li>
                    </xsl:for-each>
                </ul>
            </div>
        </body>
    </html>
</xsl:template>

</xsl:stylesheet>

将返回:

结果

<html>
    <body>
        <div id="page3">
            <ul>
            <li> 11 </li>
            <li> 12 </li>
            <li> 13 </li>
            <li> 14 </li>
            <li> 15 </li>
            </ul>
        </div>
    </body>
</html>