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

时间:2017-01-22 00:26:50

标签: xml xslt-2.0 xslt-grouping

我有一个文档,其中每个节点中的数据不同,并且有一个节点具有作为结束标记的属性。我试图在所有页面中创建具有相等行的数据页面,如果其中一个节点数据不在页面上,那么所有节点数据都应该移动到下一页面。还有一个带有“结束标记”的节点应该在最后一页中。

示例输入:

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

所需输出是包含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>

1 个答案:

答案 0 :(得分:0)

你想要

<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>
相关问题