Xslt, показывающий группу из n узлов xml по одному

Обновить:

В этом вопросе есть небольшой код 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()&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

и так далее ..

Пожалуйста, ребята, помогите мне с этим!!! Заранее большое спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Дано:

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>

ДА, да!! Вы действительно правильно поняли!! Спасибо большое ооочень!! Пожалуйста, простите меня за то, что я беспокою вас со всем этим дерьмом.. Мне просто нужно было для чего-то..! Ты замечательный!! Большое спасибо !!! Удачи вам во всем!! до свидания

mcaS48 28.05.2019 19:39

Другие вопросы по теме