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 |