我有一组必须包含在新元素中的顺序节点。例子:
<root>
<c>cccc</c>
<a gr="g1">aaaa</a> <b gr="g1">1111</b>
<a gr="g2">bbbb</a> <b gr="g2">2222</b>
</root>
必须用fold
标签括起来,导致(在 XSLT 之后):
<root>
<c>cccc</c>
<fold><a gr="g1">aaaa</a> <b gr="g1">1111</b></fold>
<fold><a gr="g2">bbbb</a> <b gr="g2">2222</b></fold>
</root>
所以,我有一个“分组标签”(@gr
),但不知道如何产生正确的折叠标签。
我正在尝试使用这个问题或另一个问题的线索......但我有一个“分组标签”,所以我知道我的解决方案不需要使用key()
函数。
我的非通用解决方案是:
<xsl:template match="/">
<root>
<xsl:copy-of select="root/c"/>
<fold><xsl:for-each select="//*[@gr='g1']">
<xsl:copy-of select="."/>
</xsl:for-each></fold>
<fold><xsl:for-each select="//*[@gr='g2']">
<xsl:copy-of select="."/>
</xsl:for-each></fold>
</root>
</xsl:template>
我需要一个通用解决方案(!),循环所有@gr 并应对(身份)所有没有@gr 的上下文......也许使用身份转换。
另一个(未来的)问题是递归地执行此操作,折叠折叠。