XML - XSLT 按计数对元素进行分组
XML - XSLT group elements by count
我需要 XSLT 方面的帮助,
我有以下输入文档:
<?xml version="1.0" encoding="utf-8"?>
<textContentList>
<textContent>
<value>LABEL1</value>
</textContent>
<textContent>
<value>LABEL2</value>
</textContent>
<textContent>
<value>LABEL3</value>
</textContent>
<textContent>
<value>LABEL4</value>
</textContent>
<textContent>
<value>LABEL5</value>
</textContent>
<textContent>
<value>FirstDATA1</value>
</textContent>
<textContent>
<value>FirstDATA2</value>
</textContent>
<textContent>
<value>FirstDATA3</value>
</textContent>
<textContent>
<value>FirstDATA4</value>
</textContent>
<textContent>
<value>FirstDATA5</value>
</textContent>
<textContent>
<value>SecondDATA1</value>
</textContent>
<textContent>
<value>SecondDATA2</value>
</textContent>
<textContent>
<value>SecondDATA3</value>
</textContent>
<textContent>
<value>SecondDATA4</value>
</textContent>
<textContent>
<value>SecondDATA5</value>
</textContent>
<textContentList>
我想做的是将每 5 个连续的 textContent
元素分组到新元素中。基本上我想做的是创建新的 list
元素,每个元素都有 5 个连续的 textContent
元素。这是我希望从上面显示的输入文档中获得的输出 XML 文档:
<?xml version="1.0" encoding="utf-8"?>
<textContentList>
<list>
<textContent>
<value>LABEL1</value>
</textContent>
<textContent>
<value>LABEL2</value>
</textContent>
<textContent>
<value>LABEL3</value>
</textContent>
<textContent>
<value>LABEL4</value>
</textContent>
<textContent>
<value>LABEL5</value>
</textContent>
</list>
<list>
<textContent>
<value>FirstDATA1</value>
</textContent>
<textContent>
<value>FirstDATA2</value>
</textContent>
<textContent>
<value>FirstDATA3</value>
</textContent>
<textContent>
<value>FirstDATA4</value>
</textContent>
<textContent>
<value>FirstDATA5</value>
</textContent>
</list>
<list>
<textContent>
<value>SecondDATA1</value>
</textContent>
<textContent>
<value>SecondDATA2</value>
</textContent>
<textContent>
<value>SecondDATA3</value>
</textContent>
<textContent>
<value>SecondDATA4</value>
</textContent>
<textContent>
<value>SecondDATA5</value>
</textContent>
</list>
<textContentList>
我认为这样做的一种方法是使用 count() 函数对每 5 个 textContent
元素进行计数并使用 <xsl:group-by>
对它们进行分组,然后传递给下五个 [=13] =] 元素,但是我不知道怎么做,
这可能不是很难,但我真的不知道如何使用 XSLT 来完成,
有人知道怎么做吗?
谢谢!
亚历山大·哈辛托
郑重声明,Martin Honnen 在评论中回答了问题:
使用位置分组
<xsl:for-each-group select="textContent" group-adjacent="(position() - 1) idiv 5">
<list>
<xsl:copy-of select="current-group()"/>
</list>
</xsl:for-each-group>
我需要 XSLT 方面的帮助,
我有以下输入文档:
<?xml version="1.0" encoding="utf-8"?>
<textContentList>
<textContent>
<value>LABEL1</value>
</textContent>
<textContent>
<value>LABEL2</value>
</textContent>
<textContent>
<value>LABEL3</value>
</textContent>
<textContent>
<value>LABEL4</value>
</textContent>
<textContent>
<value>LABEL5</value>
</textContent>
<textContent>
<value>FirstDATA1</value>
</textContent>
<textContent>
<value>FirstDATA2</value>
</textContent>
<textContent>
<value>FirstDATA3</value>
</textContent>
<textContent>
<value>FirstDATA4</value>
</textContent>
<textContent>
<value>FirstDATA5</value>
</textContent>
<textContent>
<value>SecondDATA1</value>
</textContent>
<textContent>
<value>SecondDATA2</value>
</textContent>
<textContent>
<value>SecondDATA3</value>
</textContent>
<textContent>
<value>SecondDATA4</value>
</textContent>
<textContent>
<value>SecondDATA5</value>
</textContent>
<textContentList>
我想做的是将每 5 个连续的 textContent
元素分组到新元素中。基本上我想做的是创建新的 list
元素,每个元素都有 5 个连续的 textContent
元素。这是我希望从上面显示的输入文档中获得的输出 XML 文档:
<?xml version="1.0" encoding="utf-8"?>
<textContentList>
<list>
<textContent>
<value>LABEL1</value>
</textContent>
<textContent>
<value>LABEL2</value>
</textContent>
<textContent>
<value>LABEL3</value>
</textContent>
<textContent>
<value>LABEL4</value>
</textContent>
<textContent>
<value>LABEL5</value>
</textContent>
</list>
<list>
<textContent>
<value>FirstDATA1</value>
</textContent>
<textContent>
<value>FirstDATA2</value>
</textContent>
<textContent>
<value>FirstDATA3</value>
</textContent>
<textContent>
<value>FirstDATA4</value>
</textContent>
<textContent>
<value>FirstDATA5</value>
</textContent>
</list>
<list>
<textContent>
<value>SecondDATA1</value>
</textContent>
<textContent>
<value>SecondDATA2</value>
</textContent>
<textContent>
<value>SecondDATA3</value>
</textContent>
<textContent>
<value>SecondDATA4</value>
</textContent>
<textContent>
<value>SecondDATA5</value>
</textContent>
</list>
<textContentList>
我认为这样做的一种方法是使用 count() 函数对每 5 个 textContent
元素进行计数并使用 <xsl:group-by>
对它们进行分组,然后传递给下五个 [=13] =] 元素,但是我不知道怎么做,
这可能不是很难,但我真的不知道如何使用 XSLT 来完成,
有人知道怎么做吗?
谢谢!
亚历山大·哈辛托
郑重声明,Martin Honnen 在评论中回答了问题:
使用位置分组
<xsl:for-each-group select="textContent" group-adjacent="(position() - 1) idiv 5">
<list>
<xsl:copy-of select="current-group()"/>
</list>
</xsl:for-each-group>