使用 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-of
s 相对于它们并使用select="filename"
和 select="description"
.
所以我有一个类似于这种类型的东西的 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-of
s 相对于它们并使用select="filename"
和 select="description"
.