使用 xsl group-starting-buy 对两个节点之间的元素进行分组

Using xsl group-starting-buy to group-by elements between two nodes

所以我有一个类似于这种类型的东西的 XML,我想将其转换成 wikicode:

<result>
    <h3>Heading 1</h3>
    <doc>
    <filepath>Filepath 1</filepath>
    <filename>Filename 1</filename>
    <description>Desc 1</description>
    </doc>
    <doc>
    <filepath>Filepath 12</filepath>
    <filename>Filename 12</filename>
    <description>Desc 12</description>
    </doc>
    <h3>Heading 2</h3>
    <doc>
    <filepath>Filepath 21</filepath>
    <filename>Filename 21</filename>
    <description>Desc 21</description>
    </doc>
    <doc>
    <filepath>Filepath 22</filepath>
    <filename>Filename 22</filename>
    <description>Desc 22</description>
    </doc>
    <h3>Heading 3</h3>
    <doc>
    <filepath>Filepath 31</filepath>
    <filename>Filename 31</filename>
    <description>Desc 31</description>
    </doc>
    <doc>
    <filepath>Filepath 31</filepath>
    <filename>Filename 31</filename>
    <description>Desc 31</description>
    </doc>
 <result>

  

我想做的是将所有文档元素按其上方的 h3 进行分组。拥有这样的东西:

*Heading 1
**Filename1 : Desc1
**Filename12 : Desc12
*Heading 2
**Filename 21 : Desc21
**Filename 22 : Desc22

这是我的 xsl 片段:

<xml>
  <xsl:for-each-group select=".//result" group-starting-with="h3">
     *<xsl:value-of select="current()"/>
      <xsl:for-each select="current-group()">
        **<xsl:value-of select="./doc/filename"/> : <xsl:value-of select="./doc/description"/> 
      </xsl:for-each>
    </xsl:for-each-group>
</xml>

但是,这不起作用,current() 的值向我发送了所有子节点的值,这不是我想要的。我对 XSL 的基本了解是有限的。任何帮助,将不胜感激。谢谢。

如果输入如图所示,则使用xsl:for-each-group select=".//result/*" group-starting-with="h3"

我想在里面你想处理 <xsl:for-each select="current-group()[position() ge 1]"><xsl:for-each select="current-group()[not(self::h3)]"> 来处理 h3 之后的项目,然后 value-ofs 相对于它们并使用select="filename"select="description".