[Home] [By Thread] [By Date] [Recent Entries]
Am 15.08.2020 um 13:56 schrieb Martin Honnen martin.honnen@xxxxxx:
Am 15.08.2020 um 12:19 schrieb Keith Burt keithburt66@xxxxxxxxx:
<xsl:function name="mf:wrap" as="node()*">
<xsl:param name="nodes" as="node()*"/>
<xsl:param name="tag" as="xs:string"/>
<xsl:for-each-group select="$nodes" group-starting-with="e[@tag =
$tag]">
<xsl:choose>
<xsl:when test="not(self::e[@tag = $tag])">
<xsl:apply-templates select="current-group()"/>
</xsl:when>
<xsl:otherwise>
<xsl:for-each-group select="tail(current-group())"
group-ending-with="e[@tag = '/' || $tag]">
<xsl:choose>
<xsl:when test="current-group()[last()][self::e][@tag =
'/' || $tag]">
<xsl:element name="{$tag}">
<xsl:apply-templates
select="current-group()[position() lt last()]"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:function> <xsl:function name="mf:wrap" as="node()*">
<xsl:param name="nodes" as="node()*"/>
<xsl:iterate
select="distinct-values($nodes[self::e/@tag[not(starts-with(.,
'/'))]]/@tag)">
<xsl:param name="nodes" as="node()*" select="$nodes"/>
<xsl:on-completion>
<xsl:sequence select="$nodes"/>
</xsl:on-completion>
<xsl:next-iteration>
<xsl:with-param name="nodes" select="mf:wrap($nodes, .)"/>
</xsl:next-iteration>
</xsl:iterate>
</xsl:function><xsl:mode on-no-match="shallow-copy"/> <xsl:template match="*[e[@tag]]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:sequence select="mf:wrap(node())"/>
</xsl:copy>
</xsl:template></xsl:stylesheet>
|

Cart



