|
Subject: Re: [xsl] grouping nesting items, including following items From: Don Smith <dtsmithisogen@xxxxxxxxx> Date: Tue, 19 Jun 2007 08:48:41 -0700 (PDT) |
Andrew,
Thanks. I won't be able to look at this until tonight.
Don
--- Andrew Welch <andrew.j.welch@xxxxxxxxx> wrote:
> On 6/19/07, Don Smith <dtsmithisogen@xxxxxxxxx>
> wrote:
> > I can't quite figure out how to group nested items
> and
> > also pick up items on the following axis for a
> given
> > group. Here's a sample source:
> >
> > <slide title="Introduction" id="x1">
> > <point id="x2" >
> > <text>First point</text>
> > <subpoints id="x3">
> > <point id="x3a">
> > <text>First point, subpoint 1</text>
> > </point>
> > <point id="x3b">
> > <text>First point, subpoint 2</text>
> > </point>
> > <point id="x3c">
> > <text>First point, subpoint 3</text>
> > <subpoints id="x3c1">
> > <point id="x3c1a" newSlide="true"
> title="Intro
> > (cont.)">
> > <text>First point, subpoint 3, sub-subpoint
> 1 on
> > new slide</text>
> > </point>
> > <point id="x3c1b">
> > <text>First point 4, subpoint 3,
> sub-subpoint 2
> > on new slide</text>
> > </point>
> > </subpoints>
> > </point>
> > <point id="x4d">
> > <text>First point, subpoint 4 on new
> slide</text>
> > </point>
> > </subpoints>
> > </point>
> > <point id="x5" >
> > <text>Second point, on new slide</text>
> > </point>
> > </slide>
> >
> > Note the attribute "newSlide" on <point
> id="x3c1a">: I
> > need this element, all its descendants (if any),
> and
> > everything that follows, to be in a different
> group
> > than everything that comes before. Ideally, this
> would
> > mean each group is placed in its own document
> using
> > <xsl:result-document>.
> >
> > This is just one example, but "newSlide='true'"
> can
> > occur on any <point> or even any <subpoints>.
>
> You need the "modified identity transform" - the one
> which walks the
> following-sibling axis:
>
> <xsl:template match="node()">
> <xsl:copy>
> <xsl:copy-of select="@*"/>
> <xsl:apply-templates select="node()[1]"/>
> </xsl:copy>
> <xsl:apply-templates
> select="following-sibling::node()[1]"/>
> </xsl:template>
>
> Then you just need to override it with a template
> containing the
> specific behaviour for elements with @newSlide =
> 'true':
>
> <xsl:template match="*[@newSlide = 'true']">
> <xsl:result-document href="....">
> <xsl:copy-of select="."/>
> <xsl:copy-of select="following-sibling::*"/>
> </xsl:result-document>
> </xsl:template>
>
> Notice how I've used copy-of instead of
> apply-templates here - you can
> only write one result document at once so nested
> @newSlide's would
> cause an error. To get around that don;t use
> xsl:result-document use
> a wrapper element, put the whole thing in a variable
> and then process
> that variable. Post back for an example of that if
> its needed.
>
> cheers
> andrew
>
>
____________________________________________________________________________________
Take the Internet to Go: Yahoo!Go puts the Internet in your pocket: mail, news, photos & more.
http://mobile.yahoo.com/go?refer=1GNXIC
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] grouping nesting items, i, Andrew Welch | Thread | [xsl] problem with table cell-width, Andreas Peter |
| Re: [xsl] Dynamic pipelining in XSL, Andrew Welch | Date | Re: [xsl] Preference rules for /som, Abel Braaksma |
| Month |