This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Put a wrapper around a series of elements
- To: "'xsl-list at mulberrytech dot com'" <xsl-list at mulberrytech dot com>
- Subject: RE: Put a wrapper around a series of elements
- From: Kay Michael <Michael dot Kay at icl dot com>
- Date: Fri, 10 Nov 2000 13:13:47 -0000
- Reply-To: xsl-list at mulberrytech dot com
This is a grouping problem: unlike the usual grouping problem you are
grouping by position rather than by value, but you can use the same
techniques.
Approach 1: write a recursive template all-the-bs with the following logic:
if $nodeset[1][self::b]
copy-of $nodeset[1]
call all-the-bs with-param nodeset = $nodeset[position()>1]
and call it to process the full nodeset
<bset>
call-template all-the-bs
</bset>
Approach 2: use Muenchian grouping with a key defined as
<xsl:key match="b" use="generate-id(following-sibling::c[1])">
This means all b siblings with the same following <c> will have the same key
value.
Approach 3: (Saxon only)
saxon:leading(*, saxon:expression('self::b'))
Selects all nodes in "*" up to the first one for which self::b is false.
Mike Kay
> Have
>
> <a>
> <b>some text</b>
> <b>some more text</b>
> <b>some other text</b>
> <b>some last text</b>
> <c>some c text</c>
> </a>
>
> Want
>
> <a>
> <bset>
> <b>some text</b>
> <b>some more text</b>
> <b>some other text</b>
> <b>some last text</b>
> </bset>
> <c>some c text</c>
> </a>
>
> I successfully tested for the first and last <b>, but
> couldn't output unmatched elements. . .
>
> Is there a better way?
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list