Обновить:
В этом вопросе есть небольшой код xsl!
Я борюсь с этой проблемой неделями (даже месяцами). Я довольно новичок в этой области xml/xslt, и мне нужен только один рабочий метод разбивки на страницы для моих данных xml. Я просто не могу найти только ОДНО рабочее решение по этой проблеме!
Я уже заявлял, что, на мой взгляд, разбивка на страницы является одной из самых полезных тем xml/xslt в Интернете и одной из наименее обсуждаемых тем во всей сети. Только части его и большинство из них нефункциональны. В любом случае, это все об этом вопросе stkovrflw:
xslt Разбивка записей таблицы xml на страницы
где можно было увидеть всю мою проблему. На него ответил Майкл.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()<=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
и так далее ..
Пожалуйста, ребята, помогите мне с этим!!! Заранее большое спасибо.
Дано:
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() < $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>
ДА, да!! Вы действительно правильно поняли!! Спасибо большое ооочень!! Пожалуйста, простите меня за то, что я беспокою вас со всем этим дерьмом.. Мне просто нужно было для чего-то..! Ты замечательный!! Большое спасибо !!! Удачи вам во всем!! до свидания