Группировка узлов в узлы одинакового размера

У меня есть документ, в котором данные в каждом узле разные, и есть один узел, который имеет атрибут end Tag. Я пытаюсь создать страницы данных с одинаковыми строками на всех страницах, и если данные одного из узлов не могут быть на странице, тогда все данные узла должны быть перемещены на следующую страницу. Также есть узел с «Конечным тегом», который должен быть на последней странице.

Пример ввода:

<Book>
<node>
    <line>Test</line>
    <line>Test</line>
    <line/>
</node>
<node>
    <line>Test</line>
    <line/>
</node>
<node>
    <line>Test</line>
    <line/>
</node>
<node>
    <line>Test</line>
    <line/>
</node>
<node>
    <line>First 2</line>
    <line>Second 2</line>
    <line>Third 2</line>
    <line>Fourth 2</line>
</node>
<node endTag="Y">
    <line>End</line>
    <line>Data</line>
    <line/>
</node>

Desired Output is page with 5 lines of data:

<Book>
<Page>
    <line>Test</line>
    <line>Test</line>
    <line/>
    <line>Test</line>
    <line/>
</Page>
<Page>
    <line>Test</line>
    <line/>
    <line>Test</line>
    <line/>
    <line/>
</Page>
<Page>
    <line>First 2</line>
    <line>Second 2</line>
    <line>Third 2</line>
    <line>Fourth 2</line>
    <line/>
</Page>
<Page>
    <line/>
    <line/>
    <line>End</line>
    <line>Data</line>
    <line/>
</Page>


person Mahesh Yadav    schedule 22.01.2017    source источник
comment
Покажите свой XSLT-код.   -  person Jeroen Heier    schedule 22.01.2017
comment
@Jeroen Heier: у меня был код вроде <xsl:for-each-group select="/Book/node/line" group-adjacent="(position() - 1) idiv 5"> <Page> <xsl:copy-of select="current-group()"/> </Page> </xsl:for-each-group>. Проблема в том, что я не хочу, чтобы он просто группировался по 5 элементам. Следует также учитывать, может ли весь тег ‹node› находиться на ‹Page›, иначе он должен перейти на следующую страницу. А также конечный тег всегда должен быть на последней странице.   -  person Mahesh Yadav    schedule 22.01.2017
comment
Неудачный выбор имени элемента: я запутался между узлами и элементами с именем «узел».   -  person Michael Kay    schedule 22.01.2017


Ответы (1)


Вы хотите

<xsl:for-each-group select="/Book/line" 
         group-adjacent="(position() - 1) idiv 5">
  <Page>
     <xsl:copy-of select="current-group()"/>
  </Page>
</xsl:for-each-group>
person Michael Kay    schedule 22.01.2017
comment
@ Майкл Кей: Спасибо за ваш ответ. Проблема в том, что он не помещает весь узел в один и тот же элемент страницы. Поэтому, если весь узел не помещается на странице, мне нужно переместить его на следующую страницу, а затем добавить пустые строки для предыдущей страницы. - person Mahesh Yadav; 22.01.2017