Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT2.0-如何通过选择X个节点来为每个节点创建结果_Xml_Xslt - Fatal编程技术网

Xml XSLT2.0-如何通过选择X个节点来为每个节点创建结果

Xml XSLT2.0-如何通过选择X个节点来为每个节点创建结果,xml,xslt,Xml,Xslt,我试图获取一个包含40000多个节点的XML文档,并将文档分成10000个或更少节点的段 例如,项目节点重复40000多次的XML: <catalog> <item> <partno> </partno> </item> </catalog> 我试图实现这样一种结构,即在文档完成之前,每10000个项目都会创建一个新的段 <segment> <Item></It

我试图获取一个包含40000多个节点的XML文档,并将文档分成10000个或更少节点的段

例如,项目节点重复40000多次的XML:

<catalog>
  <item>
    <partno>
    </partno>
  </item>
</catalog>

我试图实现这样一种结构,即在文档完成之前,每10000个项目都会创建一个新的段

<segment>
  <Item></Item>(10,000 max)
</segment>
<segment>
  <Item></Item>(10,000 max)
</segment>

(最多10000)
(最多10000)

我确信我可以用模来实现这一点,但我想知道是否有更优雅的方法。

您可以在XSLT2.0中尝试这一点

<xsl:template match="catalog">
    <xsl:for-each-group select="item" group-by="(position() - 1) idiv 10000">
        <segment>
            <xsl:copy-of select="current-group()"/>
        </segment>
    </xsl:for-each-group>
</xsl:template>

您可以在XSLT2.0中尝试这一点

<xsl:template match="catalog">
    <xsl:for-each-group select="item" group-by="(position() - 1) idiv 10000">
        <segment>
            <xsl:copy-of select="current-group()"/>
        </segment>
    </xsl:for-each-group>
</xsl:template>

我建议使用
分组相邻
的方式,而不是对每个分组使用
分组相邻
,如果您移动到XSLT 3,您可以轻松使用流,而无需更改分组代码(您只需将模式设置为
):


我建议使用
分组相邻
的方式,而不是对每个分组使用
分组相邻
,如果您移动到XSLT 3,您可以轻松使用流,而无需更改分组代码(您只需将模式设置为
):



谢谢你,鲁佩什!这是完美的工作方式,比我将要解决的问题要优雅得多。谢谢鲁佩什!这是一个完美的解决方案,比我要解决的问题要优雅得多。