Xml 将节点分组为大小相等的节点

Xml 将节点分组为大小相等的节点,xml,xslt-2.0,xslt-grouping,Xml,Xslt 2.0,Xslt Grouping,我有一个文档,其中每个节点中的数据都不同,并且有一个节点的属性是end标记。我试图在所有页面中创建具有相等行的数据页面,如果其中一个节点数据不能在页面上,则所有节点数据都应移动到下一页。还有一个节点带有“End Tag”,应该在最后一页 输入示例: <Book> <node> <line>Test</line> <line>Test</line> <line/> </node>

我有一个文档,其中每个节点中的数据都不同,并且有一个节点的属性是end标记。我试图在所有页面中创建具有相等行的数据页面,如果其中一个节点数据不能在页面上,则所有节点数据都应移动到下一页。还有一个节点带有“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>

试验
试验
试验
试验
试验
前2名
第二个2
第三个2
第四个2
终点
资料

所需输出为包含5行数据的页面:

<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>

试验
试验
试验
试验
试验
前2名
第二个2
第三个2
第四个2
终点
资料
你想要什么

<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>

您想要什么

<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>


显示XSLT代码。@Jeroen Heier:我的代码类似于
。问题是,我不希望它只是由5个元素组成。它还应该考虑整个标签是否可以在页面中,否则它必须移动到下一页。而且结束标记应该总是在最后一页。元素名称的选择很不幸:我把“节点”和“名为“节点”的元素”混淆了。显示XSLT代码。@Jeroen Heier:我的代码类似于
。问题是,我不希望它只是由5个元素组成。它还应该考虑整个标签是否可以在页面中,否则它必须移动到下一页。而且结束标记应该总是在最后一页。元素名称的不幸选择:我把“节点”和“名为“节点”的元素”混淆了。@Michale Kay:谢谢你的回答。问题是它没有将整个节点放在同一个页面元素中。因此,如果整个节点不适合该页面,那么我需要将其移动到下一页,然后为上一页添加空行。@Michale Kay:谢谢您的回复。问题是它没有将整个节点放在同一个页面元素中。因此,如果整个节点不适合页面,那么我需要将其移动到下一页,然后为上一页添加空行。