|
Subject: Re: [xsl] Wrap changing element sequence into container: with 'for-each-group'? From: David Carlisle <davidc@xxxxxxxxx> Date: Tue, 30 Jan 2007 17:37:12 GMT |
> 2) I fail to see how I can repeatedly group some children, when in
> between are some children that are not to be grouped. Do I need to apply
> recursion when working my way through the children?
not in xslt2, no just use for-each-group
It's so much easier if you provide an example, failing that I'll provide
one:-)
If I understand you correctly you want to take
<x>
<abc>1</abc>
<foo>bbb</foo>
<abc>b</abc>
<xyz>b</xyz>
<xyz>c</xyz>
<foo>bbb</foo>
<zzz/>
<hhh/>
<xyz>d</xyz>
</x>
and group adjacent runs of abc and xyz to produce
$ saxon8 wrap.xml wrap.xsl
<?xml version="1.0" encoding="UTF-8"?>
<x>
<wrap>
<abc>1</abc>
</wrap>
<foo>bbb</foo>
<wrap>
<abc>b</abc>
<xyz>b</xyz>
<xyz>c</xyz>
</wrap>
<foo>bbb</foo>
<zzz/>
<hhh/>
<wrap>
<xyz>d</xyz>
</wrap>
</x>
(using copy-of rather than apply-templates for simplicity)
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="x">
<x>
<xsl:for-each-group select="*" group-adjacent="exists(self::xyz|self::abc)">
<xsl:choose>
<xsl:when test="current-grouping-key()">
<wrap>
<xsl:copy-of select="current-group()"/>
</wrap>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</x>
</xsl:template>
</xsl:stylesheet>
David
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Wrap changing element seq, Yves Forkl | Thread | Re: [xsl] Wrap changing element seq, Yves Forkl |
| Re: [xsl] Storing XML doc refs in v, David Carlisle | Date | [xsl] Duplicate Nodes in XSL and tr, Punnoose, Roshan |
| Month |