XML-按计数的XSLT组元素

时间:2018-07-24 12:16:38

标签: xml xslt saxon xslt-3.0

我需要有关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>将它们分组,然后传递到下五个textContent元素,但我不知道该怎么做,

这可能不是很难,但是我真的不知道如何使用XSLT来实现,

有人知道该怎么做吗?

谢谢!

Alexandre Jacinto

1 个答案:

答案 0 :(得分:0)

记录下来,马丁·洪恩(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>