On 6/19/07, Don Smith <dtsmithisogen(_at_)yahoo(_dot_)com> 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="*[(_at_)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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--